1 /* @source ensdatabaseentry ***************************************************
2 **
3 ** Ensembl Database Entry functions
4 **
5 ** @author Copyright (C) 1999 Ensembl Developers
6 ** @author Copyright (C) 2006 Michael K. Schuster
7 ** @version $Revision: 1.54 $
8 ** @modified 2009 by Alan Bleasby for incorporation into EMBOSS core
9 ** @modified $Date: 2013/02/17 13:04:58 $ 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 /* ========================================================================= */
30 /* ============================= include files ============================= */
31 /* ========================================================================= */
32 
33 #include "ensdatabaseentry.h"
34 #include "ensgene.h"
35 #include "enstranscript.h"
36 #include "enstranslation.h"
37 #include "enstable.h"
38 
39 
40 
41 
42 /* ========================================================================= */
43 /* =============================== constants =============================== */
44 /* ========================================================================= */
45 
46 
47 
48 
49 /* ========================================================================= */
50 /* =========================== global variables ============================ */
51 /* ========================================================================= */
52 
53 
54 
55 
56 /* ========================================================================= */
57 /* ============================= private data ============================== */
58 /* ========================================================================= */
59 
60 
61 
62 
63 /* ========================================================================= */
64 /* =========================== private constants =========================== */
65 /* ========================================================================= */
66 
67 /* @conststatic externalreferenceKInfotype ************************************
68 **
69 ** The Ensembl External Reference Information Type member is enumerated in
70 ** both, the SQL table definition and the data structure. The following strings
71 ** are used for conversion in database operations and correspond to the
72 ** EnsEExternalreferenceInfotype enumeration.
73 **
74 ******************************************************************************/
75 
76 static const char *externalreferenceKInfotype[] =
77 {
78     "",
79     "PROJECTION",
80     "MISC",
81     "DEPENDENT",
82     "DIRECT",
83     "SEQUENCE_MATCH",
84     "INFERRED_PAIR",
85     "PROBE",
86     "UNMAPPED",
87     "COORDINATE_OVERLAP",
88     (const char *) NULL
89 };
90 
91 
92 
93 
94 /* @conststatic externalreferenceObjecttype ***********************************
95 **
96 ** The Ensembl External Reference Object Type member is enumerated in both,
97 ** the SQL table definition and the data structure. The following strings are
98 ** used for conversion in database operations and correspond to the
99 ** EnsEExternalreferenceObjecttype enumeration.
100 **
101 ******************************************************************************/
102 
103 static const char *externalreferenceObjecttype[] =
104 {
105     "",
106     "RawContig",
107     "Transcript",
108     "Gene",
109     "Translation",
110     (const char *) NULL
111 };
112 
113 
114 
115 
116 /* @conststatic ontologylinkageType *******************************************
117 **
118 ** The Ensembl Ontology Linkage Type member is enumerated in both,
119 ** the SQL table definition and the data structure. The following strings are
120 ** used for conversion in database operations and correspond to
121 ** EnsEOntologylinkageType.
122 **
123 ** http://www.geneontology.org/GO.evidence.shtml
124 ******************************************************************************/
125 
126 static const char *ontologylinkageType[] =
127 {
128     "",
129     "IC",  /* Inferred by Curator */
130     "IDA", /* Inferred from Direct Assay */
131     "IEA", /* Inferred from Electronic Annotation */
132     "IEP", /* Inferred from Expression Pattern */
133     "IGI", /* Inferred from Genetic Interaction */
134     "IMP", /* Inferred from Mutant Phenotype */
135     "IPI", /* Inferred from Physical Interaction */
136     "ISS", /* Inferred from Sequence or Structural Similarity */
137     "NAS", /* Non-traceable Author Statement */
138     "ND",  /* No biological Data available */
139     "TAS", /* Traceable Author Statement */
140     "NR",  /* Not Recorded */
141     "RCA", /* Inferred from Reviewed Computational Analysis */
142     "EXP", /* Inferred from Experiment */
143     "ISO", /* Inferred from Sequence Orthology */
144     "ISA", /* Inferred from Sequence Alignment */
145     "ISM", /* Inferred from Sequence Model */
146     "IGC", /* Inferred from Genomic Context */
147     (const char *) NULL
148 };
149 
150 
151 
152 
153 /* ========================================================================= */
154 /* =========================== private variables =========================== */
155 /* ========================================================================= */
156 
157 
158 
159 
160 /* ========================================================================= */
161 /* =========================== private functions =========================== */
162 /* ========================================================================= */
163 
164 static AjBool databaseentryadaptorFetchAllbyStatement(
165     EnsPDatabaseentryadaptor dbea,
166     const AjPStr statement,
167     AjPList dbes);
168 
169 static AjBool databaseentryadaptorFetchAllDependenciesByObject(
170     EnsPDatabaseentryadaptor dbea,
171     const AjPStr constraint,
172     const AjPStr objecttype,
173     ajuint objectidentifier,
174     AjPList dbes);
175 
176 static AjBool databaseentryadaptorRetrieveAllIdentifiersByExternalname(
177     EnsPDatabaseentryadaptor dbea,
178     const AjPStr name,
179     const AjPStr ensembltype,
180     const AjPStr extratype,
181     const AjPStr dbname,
182     AjBool override,
183     AjPTable identifiers);
184 
185 static AjBool databaseentryadaptorRetrieveAllIdentifiersByExternaldatabasename(
186     EnsPDatabaseentryadaptor dbea,
187     const AjPStr dbname,
188     const AjPStr ensembltype,
189     const AjPStr extratype,
190     AjPTable identifiers);
191 
192 
193 
194 
195 /* ========================================================================= */
196 /* ======================= All functions by section ======================== */
197 /* ========================================================================= */
198 
199 
200 
201 
202 /* @filesection ensdatabaseentry **********************************************
203 **
204 ** @nam1rule ens Function belongs to the Ensembl library
205 **
206 ******************************************************************************/
207 
208 
209 
210 
211 /* @datasection [EnsPExternalreference] Ensembl External Reference ************
212 **
213 ** @nam2rule Externalreference Functions for manipulating
214 ** Ensembl External Reference objects
215 **
216 ** In this implmentation the Ensembl External Reference class has been split
217 ** out of the Bio::EnsEMBL::DBEntry class and covers the "xref" SQL table.
218 **
219 ******************************************************************************/
220 
221 
222 
223 
224 /* @section constructors ******************************************************
225 **
226 ** All constructors return a new Ensembl External Reference by pointer.
227 ** It is the responsibility of the user to first destroy any previous
228 ** External Reference. The target pointer does not need to be initialised to
229 ** NULL, but it is good programming practice to do so anyway.
230 **
231 ** @fdata [EnsPExternalreference]
232 **
233 ** @nam3rule New Constructor
234 ** @nam4rule Cpy Constructor with existing object
235 ** @nam4rule Ini Constructor with initial values
236 ** @nam4rule Ref Constructor by incrementing the reference counter
237 **
238 ** @argrule Cpy er [const EnsPExternalreference] Ensembl External Reference
239 ** @argrule Ini identifier [ajuint] SQL database-internal identifier
240 ** @argrule Ini analysis [EnsPAnalysis] Ensembl Analysis
241 ** @argrule Ini edb [EnsPExternaldatabase] Ensembl External Database
242 ** @argrule Ini primaryid [AjPStr] Primary identifier
243 ** @argrule Ini displayid [AjPStr] Display identifier
244 ** @argrule Ini version [AjPStr] Version
245 ** @argrule Ini description [AjPStr] Description
246 ** @argrule Ini linkageannotation [AjPStr] Linkage annotation
247 ** @argrule Ini infotext [AjPStr] Information text
248 ** @argrule Ini erit [EnsEExternalreferenceInfotype]
249 ** Ensembl External Reference Information Type enumeration
250 ** @argrule Ini erot [EnsEExternalreferenceObjecttype]
251 ** Ensembl External Reference Object Type enumeration
252 ** @argrule Ini objectid [ajuint] Ensembl Object identifier
253 ** @argrule Ref er [EnsPExternalreference] Ensembl External Reference
254 **
255 ** @valrule * [EnsPExternalreference] Ensembl External Reference or NULL
256 **
257 ** @fcategory new
258 ******************************************************************************/
259 
260 
261 
262 
263 /* @func ensExternalreferenceNewCpy *******************************************
264 **
265 ** Object-based constructor function, which returns an independent object.
266 **
267 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
268 **
269 ** @return [EnsPExternalreference] Ensembl External Reference or NULL
270 **
271 ** @release 6.4.0
272 ** @@
273 ******************************************************************************/
274 
ensExternalreferenceNewCpy(const EnsPExternalreference er)275 EnsPExternalreference ensExternalreferenceNewCpy(
276     const EnsPExternalreference er)
277 {
278     EnsPExternalreference pthis = NULL;
279 
280     if (!er)
281         return NULL;
282 
283     AJNEW0(pthis);
284 
285     pthis->Use = 1U;
286 
287     pthis->Identifier = er->Identifier;
288 
289     /*
290       pthis->Adaptor = er->Adaptor;
291     */
292 
293     pthis->Analysis = ensAnalysisNewRef(er->Analysis);
294 
295     pthis->Externaldatabase = ensExternaldatabaseNewRef(er->Externaldatabase);
296 
297     if (er->Primaryidentifier)
298         pthis->Primaryidentifier = ajStrNewRef(er->Primaryidentifier);
299 
300     if (er->Displayidentifier)
301         pthis->Displayidentifier = ajStrNewRef(er->Displayidentifier);
302 
303     if (er->Version)
304         pthis->Version = ajStrNewRef(er->Version);
305 
306     if (er->Description)
307         pthis->Description = ajStrNewRef(er->Description);
308 
309     if (er->Linkageannotation)
310         pthis->Linkageannotation = ajStrNewRef(er->Linkageannotation);
311 
312     if (er->Infotext)
313         pthis->Infotext = ajStrNewRef(er->Infotext);
314 
315     pthis->Infotype         = er->Infotype;
316     pthis->Objecttype       = er->Objecttype;
317     pthis->Objectidentifier = er->Objectidentifier;
318 
319     return pthis;
320 }
321 
322 
323 
324 
325 /* @func ensExternalreferenceNewIni *******************************************
326 **
327 ** Constructor for an Ensembl External Reference with initial values.
328 **
329 ** @cc Bio::EnsEMBL::Storable::new
330 ** @param [r] identifier [ajuint] SQL database-internal identifier
331 ** @param [u] analysis [EnsPAnalysis] Ensembl Analysis
332 ** @cc Bio::EnsEMBL::DBEntry::new
333 ** @param [u] edb [EnsPExternaldatabase] Ensembl External Database
334 ** @param [u] primaryid [AjPStr] Primary identifier
335 ** @param [u] displayid [AjPStr] Display identifier
336 ** @param [u] version [AjPStr] Version
337 ** @param [u] description [AjPStr] Description
338 ** @param [u] linkageannotation [AjPStr] Linkage annotation
339 ** @param [u] infotext [AjPStr] Information text
340 ** @param [u] erit [EnsEExternalreferenceInfotype]
341 ** Ensembl External Reference Information Type enumeration
342 ** @param [u] erot [EnsEExternalreferenceObjecttype]
343 ** Ensembl External Reference Object Type enumeration
344 ** @param [r] objectid [ajuint] Ensembl Object identifier
345 **
346 ** @return [EnsPExternalreference] Ensembl External Reference or NULL
347 **
348 ** @release 6.4.0
349 ** @@
350 ******************************************************************************/
351 
ensExternalreferenceNewIni(ajuint identifier,EnsPAnalysis analysis,EnsPExternaldatabase edb,AjPStr primaryid,AjPStr displayid,AjPStr version,AjPStr description,AjPStr linkageannotation,AjPStr infotext,EnsEExternalreferenceInfotype erit,EnsEExternalreferenceObjecttype erot,ajuint objectid)352 EnsPExternalreference ensExternalreferenceNewIni(
353     ajuint identifier,
354     EnsPAnalysis analysis,
355     EnsPExternaldatabase edb,
356     AjPStr primaryid,
357     AjPStr displayid,
358     AjPStr version,
359     AjPStr description,
360     AjPStr linkageannotation,
361     AjPStr infotext,
362     EnsEExternalreferenceInfotype erit,
363     EnsEExternalreferenceObjecttype erot,
364     ajuint objectid)
365 {
366     EnsPExternalreference er = NULL;
367 
368     if (ajDebugTest("ensExternalreferenceNewIni"))
369     {
370         ajDebug("ensExternalreferenceNewIni\n"
371                 "  identifier %u\n"
372                 "  analysis %p\n"
373                 "  edb %p\n"
374                 "  primaryid '%S'\n"
375                 "  displayid '%S'\n"
376                 "  version '%S'\n"
377                 "  description '%S'\n"
378                 "  linkageannotation '%S'\n"
379                 "  infotext '%S'\n"
380                 "  erit '%s'\n"
381                 "  erot '%s'\n"
382                 "  objectid %u\n",
383                 identifier,
384                 analysis,
385                 edb,
386                 primaryid,
387                 displayid,
388                 version,
389                 description,
390                 linkageannotation,
391                 infotext,
392                 ensExternalreferenceInfotypeToChar(erit),
393                 ensExternalreferenceObjecttypeToChar(erot),
394                 objectid);
395 
396         ensAnalysisTrace(analysis, 1);
397 
398         ensExternaldatabaseTrace(edb, 1);
399     }
400 
401     if (!edb)
402         return NULL;
403 
404     if (!primaryid)
405         return NULL;
406 
407     AJNEW0(er);
408 
409     er->Use = 1U;
410 
411     er->Identifier = identifier;
412 
413     er->Analysis = ensAnalysisNewRef(analysis);
414 
415     er->Externaldatabase = ensExternaldatabaseNewRef(edb);
416 
417     if (primaryid)
418         er->Primaryidentifier = ajStrNewRef(primaryid);
419 
420     if (displayid)
421         er->Displayidentifier = ajStrNewRef(displayid);
422 
423     if (version)
424         er->Version = ajStrNewRef(version);
425 
426     if (description)
427         er->Description = ajStrNewRef(description);
428 
429     if (linkageannotation)
430         er->Linkageannotation = ajStrNewRef(linkageannotation);
431 
432     if (infotext)
433         er->Infotext = ajStrNewRef(infotext);
434 
435     er->Infotype         = erit;
436     er->Objecttype       = erot;
437     er->Objectidentifier = objectid;
438 
439     return er;
440 }
441 
442 
443 
444 
445 /* @func ensExternalreferenceNewRef *******************************************
446 **
447 ** Ensembl Object referencing function, which returns a pointer to the
448 ** Ensembl Object passed in and increases its reference count.
449 **
450 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
451 **
452 ** @return [EnsPExternalreference] Ensembl External Reference or NULL
453 **
454 ** @release 6.2.0
455 ** @@
456 ******************************************************************************/
457 
ensExternalreferenceNewRef(EnsPExternalreference er)458 EnsPExternalreference ensExternalreferenceNewRef(
459     EnsPExternalreference er)
460 {
461     if (!er)
462         return NULL;
463 
464     er->Use++;
465 
466     return er;
467 }
468 
469 
470 
471 
472 /* @section destructors *******************************************************
473 **
474 ** Destruction destroys all internal data structures and frees the memory
475 ** allocated for an Ensembl External Reference object.
476 **
477 ** @fdata [EnsPExternalreference]
478 **
479 ** @nam3rule Del Destroy (free) an EEnsembl xternal Reference
480 **
481 ** @argrule * Per [EnsPExternalreference*] Ensembl External Reference address
482 **
483 ** @valrule * [void]
484 **
485 ** @fcategory delete
486 ******************************************************************************/
487 
488 
489 
490 
491 /* @func ensExternalreferenceDel **********************************************
492 **
493 ** Default destructor for an Ensembl External Reference.
494 **
495 ** @param [d] Per [EnsPExternalreference*] Ensembl External Reference address
496 **
497 ** @return [void]
498 **
499 ** @release 6.2.0
500 ** @@
501 ******************************************************************************/
502 
ensExternalreferenceDel(EnsPExternalreference * Per)503 void ensExternalreferenceDel(
504     EnsPExternalreference *Per)
505 {
506     EnsPExternalreference pthis = NULL;
507 
508     if (!Per)
509         return;
510 
511 #if defined(AJ_DEBUG) && AJ_DEBUG >= 1
512     if (ajDebugTest("ensExternalreferenceDel"))
513     {
514         ajDebug("ensExternalreferenceDel\n"
515                 "  *Per %p\n",
516                 *Per);
517 
518         ensExternalreferenceTrace(*Per, 1);
519     }
520 #endif /* defined(AJ_DEBUG) && AJ_DEBUG >= 1 */
521 
522     if (!(pthis = *Per) || --pthis->Use)
523     {
524         *Per = NULL;
525 
526         return;
527     }
528 
529     ensAnalysisDel(&pthis->Analysis);
530 
531     ensExternaldatabaseDel(&pthis->Externaldatabase);
532 
533     ajStrDel(&pthis->Primaryidentifier);
534     ajStrDel(&pthis->Displayidentifier);
535     ajStrDel(&pthis->Version);
536     ajStrDel(&pthis->Description);
537     ajStrDel(&pthis->Linkageannotation);
538     ajStrDel(&pthis->Infotext);
539 
540     ajMemFree((void **) Per);
541 
542     return;
543 }
544 
545 
546 
547 
548 /* @section member retrieval **************************************************
549 **
550 ** Functions for returning members of an Ensembl External Reference object.
551 **
552 ** @fdata [EnsPExternalreference]
553 **
554 ** @nam3rule Get Return External Reference attribute(s)
555 ** @nam4rule Adaptor Return the Ensembl External Reference Adaptor
556 ** @nam4rule Analysis Return the Ensembl Analysis
557 ** @nam4rule Description Return the description
558 ** @nam4rule Displayidentifier Return the display identifier
559 ** @nam4rule Externaldatabase Return the Ensembl External Database
560 ** @nam4rule Identifier Return the SQL database-internal identifier
561 ** @nam4rule Infotext Return the information text
562 ** @nam4rule Infotype Return the
563 ** Ensembl External Reference Information Type enumeration
564 ** @nam4rule Objectidentifier Return the Ensembl Object identifier
565 ** @nam4rule Objecttype Return the
566 ** Ensembl External Reference Object Type enumeration
567 ** @nam4rule Primaryidentifier Return the primary identifier
568 ** @nam4rule Version Return the version
569 ** @nam4rule Linkageannotation Return the linkage annotation
570 **
571 ** @argrule * er [const EnsPExternalreference] External Reference
572 **
573 ** @valrule Adaptor [EnsPExternalreferenceadaptor]
574 ** Ensembl External Reference Adaptor or NULL
575 ** @valrule Analysis [EnsPAnalysis] Ensembl Analysis or NULL
576 ** @valrule Description [AjPStr] Description or NULL
577 ** @valrule Displayidentifier [AjPStr] Display identifier or NULL
578 ** @valrule Externaldatabase [EnsPExternaldatabase] External Database or NULL
579 ** @valrule Identifier [ajuint] SQL database-internal identifier or 0U
580 ** @valrule Infotext [AjPStr] Information text or NULL
581 ** @valrule Infotype [EnsEExternalreferenceInfotype]
582 ** Ensembl External Reference Information Type enumeration or
583 ** ensEExternalreferenceInfotypeNULL
584 ** @valrule Objectidentifier [ajuint] Ensembl Object identifier or 0U
585 ** @valrule Objecttype [EnsEExternalreferenceObjecttype]
586 ** Ensembl External Reference Object Type enumeration or
587 ** ensEExternalreferenceObjecttypeNULL
588 ** @valrule Primaryidentifier [AjPStr] Primary identifier or NULL
589 ** @valrule Version [AjPStr] Version or NULL
590 ** @valrule Linkageannotation [AjPStr] Linkage annotation or NULL
591 **
592 ** @fcategory use
593 ******************************************************************************/
594 
595 
596 
597 
598 #if AJFALSE
599 /* @func ensExternalreferenceGetAdaptor ***************************************
600 **
601 ** Get the Ensembl External Reference Adaptor member of an
602 ** Ensembl External Reference.
603 **
604 ** @cc Bio::EnsEMBL::Storable::adaptor
605 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
606 **
607 ** @return [EnsPExternalreferenceadaptor] Ensembl External Reference Adaptor
608 **                                        or NULL
609 **
610 ** @release 6.2.0
611 ** @@
612 ******************************************************************************/
613 
ensExternalreferenceGetAdaptor(const EnsPExternalreference er)614 EnsPExternalreferenceadaptor ensExternalreferenceGetAdaptor(
615     const EnsPExternalreference er)
616 {
617     return (er) ? er->Adaptor : NULL;
618 }
619 #endif /* AJFALSE */
620 
621 
622 
623 
624 /* @func ensExternalreferenceGetAnalysis **************************************
625 **
626 ** Get the Ensembl Analysis member of an Ensembl External Reference.
627 **
628 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
629 **
630 ** @return [EnsPAnalysis] Ensembl Analysis or NULL
631 **
632 ** @release 6.2.0
633 ** @@
634 ******************************************************************************/
635 
ensExternalreferenceGetAnalysis(const EnsPExternalreference er)636 EnsPAnalysis ensExternalreferenceGetAnalysis(
637     const EnsPExternalreference er)
638 {
639     return (er) ? er->Analysis : NULL;
640 }
641 
642 
643 
644 
645 /* @func ensExternalreferenceGetDescription ***********************************
646 **
647 ** Get the description member of an Ensembl External Reference.
648 **
649 ** @cc Bio::EnsEMBL::DBEntry::description
650 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
651 **
652 ** @return [AjPStr] Description or NULL
653 **
654 ** @release 6.2.0
655 ** @@
656 ******************************************************************************/
657 
ensExternalreferenceGetDescription(const EnsPExternalreference er)658 AjPStr ensExternalreferenceGetDescription(
659     const EnsPExternalreference er)
660 {
661     return (er) ? er->Description : NULL;
662 }
663 
664 
665 
666 
667 /* @func ensExternalreferenceGetDisplayidentifier *****************************
668 **
669 ** Get the display identifier member of an Ensembl External Reference.
670 **
671 ** @cc Bio::EnsEMBL::DBEntry::display_id
672 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
673 **
674 ** @return [AjPStr] Display identifier or NULL
675 **
676 ** @release 6.4.0
677 ** @@
678 ******************************************************************************/
679 
ensExternalreferenceGetDisplayidentifier(const EnsPExternalreference er)680 AjPStr ensExternalreferenceGetDisplayidentifier(
681     const EnsPExternalreference er)
682 {
683     return (er) ? er->Displayidentifier : NULL;
684 }
685 
686 
687 
688 
689 /* @func ensExternalreferenceGetExternaldatabase ******************************
690 **
691 ** Get the Ensembl External Database member of an
692 ** Ensembl External Reference.
693 **
694 ** @cc Bio::EnsEMBL::DBEntry::dbname
695 ** @cc Bio::EnsEMBL::DBEntry::release
696 ** @cc Bio::EnsEMBL::DBEntry::secondary_db_name
697 ** @cc Bio::EnsEMBL::DBEntry::secondary_db_table
698 ** @cc Bio::EnsEMBL::DBEntry::description
699 ** @cc Bio::EnsEMBL::DBEntry::status
700 ** @cc Bio::EnsEMBL::DBEntry::type
701 ** @cc Bio::EnsEMBL::DBEntry::priority
702 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
703 **
704 ** @return [EnsPExternaldatabase] Ensembl External Database or NULL
705 **
706 ** @release 6.2.0
707 ** @@
708 ******************************************************************************/
709 
ensExternalreferenceGetExternaldatabase(const EnsPExternalreference er)710 EnsPExternaldatabase ensExternalreferenceGetExternaldatabase(
711     const EnsPExternalreference er)
712 {
713     return (er) ? er->Externaldatabase : NULL;
714 }
715 
716 
717 
718 
719 /* @func ensExternalreferenceGetIdentifier ************************************
720 **
721 ** Get the SQL database-internal identifier member of an
722 ** Ensembl External Reference.
723 **
724 ** @cc Bio::EnsEMBL::Storable::dbID
725 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
726 **
727 ** @return [ajuint] SQL database-internal identifier or 0U
728 **
729 ** @release 6.2.0
730 ** @@
731 ******************************************************************************/
732 
ensExternalreferenceGetIdentifier(const EnsPExternalreference er)733 ajuint ensExternalreferenceGetIdentifier(
734     const EnsPExternalreference er)
735 {
736     return (er) ? er->Identifier : 0U;
737 }
738 
739 
740 
741 
742 /* @func ensExternalreferenceGetInfotext **************************************
743 **
744 ** Get the information text member of an Ensembl External Reference.
745 **
746 ** @cc Bio::EnsEMBL::DBEntry::info_text
747 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
748 **
749 ** @return [AjPStr] Information text or NULL
750 **
751 ** @release 6.4.0
752 ** @@
753 ******************************************************************************/
754 
ensExternalreferenceGetInfotext(const EnsPExternalreference er)755 AjPStr ensExternalreferenceGetInfotext(
756     const EnsPExternalreference er)
757 {
758     return (er) ? er->Infotext : NULL;
759 }
760 
761 
762 
763 
764 /* @func ensExternalreferenceGetInfotype **************************************
765 **
766 ** Get the information type member of an Ensembl External Reference.
767 **
768 ** @cc Bio::EnsEMBL::DBEntry::info_type
769 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
770 **
771 ** @return [EnsEExternalreferenceInfotype]
772 ** Ensembl External Reference Information Type or
773 ** ensEExternalreferenceInfotypeNULL
774 **
775 ** @release 6.4.0
776 ** @@
777 ******************************************************************************/
778 
ensExternalreferenceGetInfotype(const EnsPExternalreference er)779 EnsEExternalreferenceInfotype ensExternalreferenceGetInfotype(
780     const EnsPExternalreference er)
781 {
782     return (er) ? er->Infotype : ensEExternalreferenceInfotypeNULL;
783 }
784 
785 
786 
787 
788 /* @func ensExternalreferenceGetLinkageannotation *****************************
789 **
790 ** Get the linkage annotation member of an Ensembl External Reference.
791 **
792 ** @cc Bio::EnsEMBL::DBEntry::linkage_annotation
793 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
794 **
795 ** @return [AjPStr] Linkage annotation or NULL
796 **
797 ** @release 6.4.0
798 ** @@
799 ******************************************************************************/
800 
ensExternalreferenceGetLinkageannotation(const EnsPExternalreference er)801 AjPStr ensExternalreferenceGetLinkageannotation(
802     const EnsPExternalreference er)
803 {
804     return (er) ? er->Linkageannotation : NULL;
805 }
806 
807 
808 
809 
810 /* @func ensExternalreferenceGetObjectidentifier ******************************
811 **
812 ** Get the Ensembl Object identifier member of an
813 ** Ensembl External Reference.
814 **
815 ** @cc Bio::EnsEMBL::DBEntry::ensembl_id
816 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
817 **
818 ** @return [ajuint] Ensembl Object identifier or 0U
819 **
820 ** @release 6.4.0
821 ** @@
822 ******************************************************************************/
823 
ensExternalreferenceGetObjectidentifier(const EnsPExternalreference er)824 ajuint ensExternalreferenceGetObjectidentifier(
825     const EnsPExternalreference er)
826 {
827     return (er) ? er->Objectidentifier : 0U;
828 }
829 
830 
831 
832 
833 /* @func ensExternalreferenceGetObjecttype ************************************
834 **
835 ** Get the Ensembl External Refernece Object Type member of an
836 ** Ensembl External Reference.
837 **
838 ** @cc Bio::EnsEMBL::DBEntry::ensembl_object_type
839 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
840 **
841 ** @return [EnsEExternalreferenceObjecttype]
842 ** Ensembl External Reference Object Type or
843 ** ensEExternalreferenceObjecttypeNULL
844 **
845 ** @release 6.4.0
846 ** @@
847 ******************************************************************************/
848 
ensExternalreferenceGetObjecttype(const EnsPExternalreference er)849 EnsEExternalreferenceObjecttype ensExternalreferenceGetObjecttype(
850     const EnsPExternalreference er)
851 {
852     return (er) ? er->Objecttype : ensEExternalreferenceObjecttypeNULL;
853 }
854 
855 
856 
857 
858 /* @func ensExternalreferenceGetPrimaryidentifier *****************************
859 **
860 ** Get the primary identifier member of an Ensembl External Reference.
861 **
862 ** @cc Bio::EnsEMBL::DBEntry::primary_id
863 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
864 **
865 ** @return [AjPStr] Primary identifier or NULL
866 **
867 ** @release 6.4.0
868 ** @@
869 ******************************************************************************/
870 
ensExternalreferenceGetPrimaryidentifier(const EnsPExternalreference er)871 AjPStr ensExternalreferenceGetPrimaryidentifier(
872     const EnsPExternalreference er)
873 {
874     return (er) ? er->Primaryidentifier : NULL;
875 }
876 
877 
878 
879 
880 /* @func ensExternalreferenceGetVersion ***************************************
881 **
882 ** Get the version member of an Ensembl External Reference.
883 **
884 ** @cc Bio::EnsEMBL::DBEntry::version
885 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
886 **
887 ** @return [AjPStr] Version or NULL
888 **
889 ** @release 6.2.0
890 ** @@
891 ******************************************************************************/
892 
ensExternalreferenceGetVersion(const EnsPExternalreference er)893 AjPStr ensExternalreferenceGetVersion(
894     const EnsPExternalreference er)
895 {
896     return (er) ? er->Version : NULL;
897 }
898 
899 
900 
901 
902 /* @section member assignment *************************************************
903 **
904 ** Functions for assigning members of an Ensembl External Reference object.
905 **
906 ** @fdata [EnsPExternalreference]
907 **
908 ** @nam3rule Set Set one member of an Ensembl External Reference
909 ** @nam4rule Adaptor Set the Ensembl External Database Adaptor
910 ** @nam4rule Analysis Set the Ensembl Analysis
911 ** @nam4rule Description Set the description
912 ** @nam4rule Displayidentifier Set the display identifier
913 ** @nam4rule Externaldatabase Set the Ensembl External Database
914 ** @nam4rule Identifier Set the SQL database-internal identifier
915 ** @nam4rule Linkageannotation Set the linkage annotation
916 ** @nam4rule Objectidentifier Set the Ensembl Object identifier
917 ** @nam4rule Objecttype Set the
918 ** Ensembl External Reference Object Type enumeration
919 ** @nam4rule Primaryidentifier Set the primary identifier
920 ** @nam4rule Version Set the version
921 ** @nam4rule Infotext Set the information text
922 ** @nam4rule Infotype Set the information type
923 **
924 ** @argrule * er [EnsPExternalreference] Ensembl External Reference object
925 ** @argrule Adaptor adaptor [EnsPExternalreferenceadaptor] Ensembl External
926 ** Reference Adaptor
927 ** @argrule Analysis analysis [EnsPAnalysis] Ensembl Analysis
928 ** @argrule Description description [AjPStr] Description
929 ** @argrule Displayidentifier displayid [AjPStr] Display identifier
930 ** @argrule Externaldatabase edb [EnsPExternaldatabase] Ensembl External
931 ** Database
932 ** @argrule Identifier identifier [ajuint] SQL database-internal identifier
933 ** @argrule Infotext infotext [AjPStr] Information text
934 ** @argrule Infotype erit [EnsEExternalreferenceInfotype]
935 ** Ensembl External Reference Information Type enumeration
936 ** @argrule Linkageannotation linkageannotation [AjPStr] Linkage annotation
937 ** @argrule Objectidentifier objectid [ajuint] Ensembl Object identifier
938 ** @argrule Objecttype erot [EnsEExternalreferenceObjecttype]
939 ** Ensembl External Reference Object Type enumeration
940 ** @argrule Primaryidentifier primaryid [AjPStr] Primary identifier
941 ** @argrule Version version [AjPStr] Version
942 **
943 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
944 **
945 ** @fcategory modify
946 ******************************************************************************/
947 
948 
949 
950 
951 #if AJFALSE
952 /* @func ensExternalreferenceSetAdaptor ***************************************
953 **
954 ** Set the Ensembl External Reference Adaptor member of an
955 ** Ensembl External Reference.
956 **
957 ** @cc Bio::EnsEMBL::Storable::adaptor
958 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
959 ** @param [u] adaptor [EnsPExternalreferenceadaptor] Ensembl External
960 **                                                   Reference Adaptor
961 **
962 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
963 **
964 ** @release 6.2.0
965 ** @@
966 ******************************************************************************/
967 
ensExternalreferenceSetAdaptor(EnsPExternalreference er,EnsPExternalreferenceadaptor adaptor)968 AjBool ensExternalreferenceSetAdaptor(EnsPExternalreference er,
969                                       EnsPExternalreferenceadaptor adaptor)
970 {
971     if (!er)
972         return ajFalse;
973 
974     er->Adaptor = adaptor;
975 
976     return ajTrue;
977 }
978 #endif /* AJFALSE */
979 
980 
981 
982 
983 /* @func ensExternalreferenceSetAnalysis **************************************
984 **
985 ** Set the Ensembl Analysis member of an Ensembl External Reference.
986 **
987 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
988 ** @param [u] analysis [EnsPAnalysis] Ensembl Analysis
989 **
990 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
991 **
992 ** @release 6.2.0
993 ** @@
994 ******************************************************************************/
995 
ensExternalreferenceSetAnalysis(EnsPExternalreference er,EnsPAnalysis analysis)996 AjBool ensExternalreferenceSetAnalysis(EnsPExternalreference er,
997                                        EnsPAnalysis analysis)
998 {
999     if (!er)
1000         return ajFalse;
1001 
1002     ensAnalysisDel(&er->Analysis);
1003 
1004     er->Analysis = ensAnalysisNewRef(analysis);
1005 
1006     return ajTrue;
1007 }
1008 
1009 
1010 
1011 
1012 /* @func ensExternalreferenceSetDescription ***********************************
1013 **
1014 ** Set the description member of an Ensembl External Reference.
1015 **
1016 ** @cc Bio::EnsEMBL::DBEntry::description
1017 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
1018 ** @param [u] description [AjPStr] Description
1019 **
1020 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1021 **
1022 ** @release 6.2.0
1023 ** @@
1024 ******************************************************************************/
1025 
ensExternalreferenceSetDescription(EnsPExternalreference er,AjPStr description)1026 AjBool ensExternalreferenceSetDescription(EnsPExternalreference er,
1027                                           AjPStr description)
1028 {
1029     if (!er)
1030         return ajFalse;
1031 
1032     ajStrDel(&er->Description);
1033 
1034     er->Description = ajStrNewRef(description);
1035 
1036     return ajTrue;
1037 }
1038 
1039 
1040 
1041 
1042 /* @func ensExternalreferenceSetDisplayidentifier *****************************
1043 **
1044 ** Set the display identifier member of an Ensembl External Reference.
1045 **
1046 ** @cc Bio::EnsEMBL::DBEntry::display_id
1047 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
1048 ** @param [u] displayid [AjPStr] Display identifier
1049 **
1050 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1051 **
1052 ** @release 6.4.0
1053 ** @@
1054 ******************************************************************************/
1055 
ensExternalreferenceSetDisplayidentifier(EnsPExternalreference er,AjPStr displayid)1056 AjBool ensExternalreferenceSetDisplayidentifier(EnsPExternalreference er,
1057                                                 AjPStr displayid)
1058 {
1059     if (!er)
1060         return ajFalse;
1061 
1062     ajStrDel(&er->Displayidentifier);
1063 
1064     er->Displayidentifier = ajStrNewRef(displayid);
1065 
1066     return ajTrue;
1067 }
1068 
1069 
1070 
1071 
1072 /* @func ensExternalreferenceSetExternaldatabase ******************************
1073 **
1074 ** Set the Ensembl External Database member of an Ensembl External Reference.
1075 **
1076 ** @cc Bio::EnsEMBL::DBEntry::dbname
1077 ** @cc Bio::EnsEMBL::DBEntry::release
1078 ** @cc Bio::EnsEMBL::DBEntry::secondary_db_name
1079 ** @cc Bio::EnsEMBL::DBEntry::secondary_db_table
1080 ** @cc Bio::EnsEMBL::DBEntry::description
1081 ** @cc Bio::EnsEMBL::DBEntry::status
1082 ** @cc Bio::EnsEMBL::DBEntry::type
1083 ** @cc Bio::EnsEMBL::DBEntry::priority
1084 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
1085 ** @param [u] edb [EnsPExternaldatabase] Ensembl External Database
1086 **
1087 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1088 **
1089 ** @release 6.2.0
1090 ** @@
1091 ******************************************************************************/
1092 
ensExternalreferenceSetExternaldatabase(EnsPExternalreference er,EnsPExternaldatabase edb)1093 AjBool ensExternalreferenceSetExternaldatabase(EnsPExternalreference er,
1094                                                EnsPExternaldatabase edb)
1095 {
1096     if (!er)
1097         return ajFalse;
1098 
1099     ensExternaldatabaseDel(&er->Externaldatabase);
1100 
1101     er->Externaldatabase = ensExternaldatabaseNewRef(edb);
1102 
1103     return ajTrue;
1104 }
1105 
1106 
1107 
1108 
1109 /* @func ensExternalreferenceSetIdentifier ************************************
1110 **
1111 ** Set the SQL database-internal identifier member of an
1112 ** Ensembl External Reference.
1113 **
1114 ** @cc Bio::EnsEMBL::Storable::dbID
1115 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
1116 ** @param [r] identifier [ajuint] SQL database-internal identifier
1117 **
1118 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1119 **
1120 ** @release 6.2.0
1121 ** @@
1122 ******************************************************************************/
1123 
ensExternalreferenceSetIdentifier(EnsPExternalreference er,ajuint identifier)1124 AjBool ensExternalreferenceSetIdentifier(EnsPExternalreference er,
1125                                          ajuint identifier)
1126 {
1127     if (!er)
1128         return ajFalse;
1129 
1130     er->Identifier = identifier;
1131 
1132     return ajTrue;
1133 }
1134 
1135 
1136 
1137 
1138 /* @func ensExternalreferenceSetInfotext **************************************
1139 **
1140 ** Set the information text member of an Ensembl External Reference.
1141 **
1142 ** @cc Bio::EnsEMBL::DBEntry::info_text
1143 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
1144 ** @param [u] infotext [AjPStr] Information text
1145 **
1146 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1147 **
1148 ** @release 6.4.0
1149 ** @@
1150 ******************************************************************************/
1151 
ensExternalreferenceSetInfotext(EnsPExternalreference er,AjPStr infotext)1152 AjBool ensExternalreferenceSetInfotext(EnsPExternalreference er,
1153                                        AjPStr infotext)
1154 {
1155     if (!er)
1156         return ajFalse;
1157 
1158     ajStrDel(&er->Infotext);
1159 
1160     er->Infotext = ajStrNewRef(infotext);
1161 
1162     return ajTrue;
1163 }
1164 
1165 
1166 
1167 
1168 /* @func ensExternalreferenceSetInfotype **************************************
1169 **
1170 ** Set the Ensembl External Reference Information Type member of an
1171 ** Ensembl External Reference.
1172 **
1173 ** @cc Bio::EnsEMBL::DBEntry::info_type
1174 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
1175 ** @param [u] erit [EnsEExternalreferenceInfotype]
1176 ** Ensembl External Reference Information Type enumeration
1177 **
1178 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1179 **
1180 ** @release 6.4.0
1181 ** @@
1182 ******************************************************************************/
1183 
ensExternalreferenceSetInfotype(EnsPExternalreference er,EnsEExternalreferenceInfotype erit)1184 AjBool ensExternalreferenceSetInfotype(EnsPExternalreference er,
1185                                        EnsEExternalreferenceInfotype erit)
1186 {
1187     if (!er)
1188         return ajFalse;
1189 
1190     er->Infotype = erit;
1191 
1192     return ajTrue;
1193 }
1194 
1195 
1196 
1197 
1198 /* @func ensExternalreferenceSetLinkageannotation *****************************
1199 **
1200 ** Set the linkage annotation member of an Ensembl External Reference.
1201 **
1202 ** @cc Bio::EnsEMBL::DBEntry::linkage_annotation
1203 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
1204 ** @param [u] linkageannotation [AjPStr] Linkage annotation
1205 **
1206 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1207 **
1208 ** @release 6.4.0
1209 ** @@
1210 ******************************************************************************/
1211 
ensExternalreferenceSetLinkageannotation(EnsPExternalreference er,AjPStr linkageannotation)1212 AjBool ensExternalreferenceSetLinkageannotation(EnsPExternalreference er,
1213                                                 AjPStr linkageannotation)
1214 {
1215     if (!er)
1216         return ajFalse;
1217 
1218     ajStrDel(&er->Linkageannotation);
1219 
1220     er->Linkageannotation = ajStrNewRef(linkageannotation);
1221 
1222     return ajTrue;
1223 }
1224 
1225 
1226 
1227 
1228 /* @func ensExternalreferenceSetObjectidentifier ******************************
1229 **
1230 ** Set the Ensembl Object identifier member of an
1231 ** Ensembl External Reference.
1232 **
1233 ** @cc Bio::EnsEMBL::DBEntry::ensembl_id
1234 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
1235 ** @param [r] objectid [ajuint] Ensembl Object identifier
1236 **
1237 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1238 **
1239 ** @release 6.4.0
1240 ** @@
1241 ******************************************************************************/
1242 
ensExternalreferenceSetObjectidentifier(EnsPExternalreference er,ajuint objectid)1243 AjBool ensExternalreferenceSetObjectidentifier(EnsPExternalreference er,
1244                                                ajuint objectid)
1245 {
1246     if (!er)
1247         return ajFalse;
1248 
1249     er->Objectidentifier = objectid;
1250 
1251     return ajTrue;
1252 }
1253 
1254 
1255 
1256 
1257 /* @func ensExternalreferenceSetObjecttype ************************************
1258 **
1259 ** Set the Ensembl External Reference Object Type member of an
1260 ** Ensembl External Reference.
1261 **
1262 ** @cc Bio::EnsEMBL::DBEntry::ensembl_object_type
1263 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
1264 ** @param [u] erot [EnsEExternalreferenceObjecttype]
1265 ** Ensembl External Reference Object Type enumeration
1266 **
1267 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1268 **
1269 ** @release 6.4.0
1270 ** @@
1271 ******************************************************************************/
1272 
ensExternalreferenceSetObjecttype(EnsPExternalreference er,EnsEExternalreferenceObjecttype erot)1273 AjBool ensExternalreferenceSetObjecttype(EnsPExternalreference er,
1274                                          EnsEExternalreferenceObjecttype erot)
1275 {
1276     if (!er)
1277         return ajFalse;
1278 
1279     er->Objecttype = erot;
1280 
1281     return ajTrue;
1282 }
1283 
1284 
1285 
1286 
1287 /* @func ensExternalreferenceSetPrimaryidentifier *****************************
1288 **
1289 ** Set the primary identifier member of an Ensembl External Reference.
1290 **
1291 ** @cc Bio::EnsEMBL::DBEntry::primary_id
1292 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
1293 ** @param [u] primaryid [AjPStr] Primary identifier
1294 **
1295 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1296 **
1297 ** @release 6.4.0
1298 ** @@
1299 ******************************************************************************/
1300 
ensExternalreferenceSetPrimaryidentifier(EnsPExternalreference er,AjPStr primaryid)1301 AjBool ensExternalreferenceSetPrimaryidentifier(EnsPExternalreference er,
1302                                                 AjPStr primaryid)
1303 {
1304     if (!er)
1305         return ajFalse;
1306 
1307     ajStrDel(&er->Primaryidentifier);
1308 
1309     er->Primaryidentifier = ajStrNewRef(primaryid);
1310 
1311     return ajTrue;
1312 }
1313 
1314 
1315 
1316 
1317 /* @func ensExternalreferenceSetVersion ***************************************
1318 **
1319 ** Set the version member of an Ensembl External Reference.
1320 **
1321 ** @cc Bio::EnsEMBL::DBEntry::version
1322 ** @param [u] er [EnsPExternalreference] Ensembl External Reference
1323 ** @param [u] version [AjPStr] Version
1324 **
1325 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1326 **
1327 ** @release 6.2.0
1328 ** @@
1329 ******************************************************************************/
1330 
ensExternalreferenceSetVersion(EnsPExternalreference er,AjPStr version)1331 AjBool ensExternalreferenceSetVersion(EnsPExternalreference er,
1332                                       AjPStr version)
1333 {
1334     if (!er)
1335         return ajFalse;
1336 
1337     ajStrDel(&er->Version);
1338 
1339     er->Version = ajStrNewRef(version);
1340 
1341     return ajTrue;
1342 }
1343 
1344 
1345 
1346 
1347 /* @section debugging *********************************************************
1348 **
1349 ** Functions for reporting of an Ensembl External Reference object.
1350 **
1351 ** @fdata [EnsPExternalreference]
1352 **
1353 ** @nam3rule Trace Report Ensembl External Reference members to debug file
1354 **
1355 ** @argrule Trace er [const EnsPExternalreference] Ensembl External Reference
1356 ** @argrule Trace level [ajuint] Indentation level
1357 **
1358 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
1359 **
1360 ** @fcategory misc
1361 ******************************************************************************/
1362 
1363 
1364 
1365 
1366 /* @func ensExternalreferenceTrace ********************************************
1367 **
1368 ** Trace an Ensembl External Reference.
1369 **
1370 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
1371 ** @param [r] level [ajuint] Indentation level
1372 **
1373 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1374 **
1375 ** @release 6.2.0
1376 ** @@
1377 ******************************************************************************/
1378 
ensExternalreferenceTrace(const EnsPExternalreference er,ajuint level)1379 AjBool ensExternalreferenceTrace(const EnsPExternalreference er, ajuint level)
1380 {
1381     AjPStr indent = NULL;
1382 
1383     if (!er)
1384         return ajFalse;
1385 
1386     indent = ajStrNew();
1387 
1388     ajStrAppendCountK(&indent, ' ', level * 2);
1389 
1390     ajDebug("%SensExternalreferenceTrace %p\n"
1391             "%S  Use %u\n"
1392             "%S  Identifier %u\n"
1393 #if AJFALSE
1394             "%S  Adaptor %p\n"
1395 #endif /* AJFALSE */
1396             "%S  Analysis %p\n"
1397             "%S  Externaldatabase %p\n"
1398             "%S  Primaryidentifier '%S'\n"
1399             "%S  Displayidentifier '%S'\n"
1400             "%S  Version '%S'\n"
1401             "%S  Description '%S'\n"
1402             "%S  Linkageannotation '%S'\n"
1403             "%S  Infotext '%S'\n"
1404             "%S  Infotype '%s'\n"
1405             "%S  Objecttype '%s'\n"
1406             "%S  Objectidentifier %u\n",
1407             indent, er,
1408             indent, er->Use,
1409             indent, er->Identifier,
1410 #if AJFALSE
1411             indent, er->Adaptor,
1412 #endif /* AJFALSE */
1413             indent, er->Analysis,
1414             indent, er->Externaldatabase,
1415             indent, er->Primaryidentifier,
1416             indent, er->Displayidentifier,
1417             indent, er->Version,
1418             indent, er->Description,
1419             indent, er->Linkageannotation,
1420             indent, er->Infotext,
1421             indent, ensExternalreferenceInfotypeToChar(er->Infotype),
1422             indent, ensExternalreferenceObjecttypeToChar(er->Objecttype),
1423             indent, er->Objectidentifier);
1424 
1425     ensAnalysisTrace(er->Analysis, level + 1);
1426 
1427     ensExternaldatabaseTrace(er->Externaldatabase, level + 1);
1428 
1429     ajStrDel(&indent);
1430 
1431     return ajTrue;
1432 }
1433 
1434 
1435 
1436 
1437 /* @section calculate *********************************************************
1438 **
1439 ** Functions for calculating information from an
1440 ** Ensembl External Reference object.
1441 **
1442 ** @fdata [EnsPExternalreference]
1443 **
1444 ** @nam3rule Calculate Calculate Ensembl External Reference information
1445 ** @nam4rule Memsize Calculate the memory size in bytes
1446 **
1447 ** @argrule * er [const EnsPExternalreference] Ensembl External Reference
1448 **
1449 ** @valrule Memsize [size_t] Memory size in bytes or 0
1450 **
1451 ** @fcategory misc
1452 ******************************************************************************/
1453 
1454 
1455 
1456 
1457 /* @func ensExternalreferenceCalculateMemsize *********************************
1458 **
1459 ** Calculate the memory size in bytes of an Ensembl External Reference.
1460 **
1461 ** @param [r] er [const EnsPExternalreference] Ensembl External Reference
1462 **
1463 ** @return [size_t] Memory size in bytes or 0
1464 **
1465 ** @release 6.4.0
1466 ** @@
1467 ******************************************************************************/
1468 
ensExternalreferenceCalculateMemsize(const EnsPExternalreference er)1469 size_t ensExternalreferenceCalculateMemsize(const EnsPExternalreference er)
1470 {
1471     size_t size = 0;
1472 
1473     if (!er)
1474         return 0;
1475 
1476     size += sizeof (EnsOExternalreference);
1477 
1478     size += ensAnalysisCalculateMemsize(er->Analysis);
1479 
1480     size += ensExternaldatabaseCalculateMemsize(er->Externaldatabase);
1481 
1482     if (er->Primaryidentifier)
1483     {
1484         size += sizeof (AjOStr);
1485 
1486         size += ajStrGetRes(er->Primaryidentifier);
1487     }
1488 
1489     if (er->Displayidentifier)
1490     {
1491         size += sizeof (AjOStr);
1492 
1493         size += ajStrGetRes(er->Displayidentifier);
1494     }
1495 
1496     if (er->Version)
1497     {
1498         size += sizeof (AjOStr);
1499 
1500         size += ajStrGetRes(er->Version);
1501     }
1502 
1503     if (er->Description)
1504     {
1505         size += sizeof (AjOStr);
1506 
1507         size += ajStrGetRes(er->Description);
1508     }
1509 
1510     if (er->Linkageannotation)
1511     {
1512         size += sizeof (AjOStr);
1513 
1514         size += ajStrGetRes(er->Linkageannotation);
1515     }
1516 
1517     if (er->Infotext)
1518     {
1519         size += sizeof (AjOStr);
1520 
1521         size += ajStrGetRes(er->Infotext);
1522     }
1523 
1524     return size;
1525 }
1526 
1527 
1528 
1529 
1530 /* @datasection [EnsEExternalreferenceInfotype] Ensembl External Reference
1531 ** Information Type
1532 **
1533 ** @nam2rule Externalreference Functions for manipulating
1534 ** Ensembl External Reference objects
1535 ** @nam3rule ExternalreferenceInfotype Functions for manipulating
1536 ** Ensembl External Reference Information Type enumerations
1537 **
1538 ******************************************************************************/
1539 
1540 
1541 
1542 
1543 /* @section Misc **************************************************************
1544 **
1545 ** Functions for returning an
1546 ** Ensembl External Reference Information Type enumeration.
1547 **
1548 ** @fdata [EnsEExternalreferenceInfotype]
1549 **
1550 ** @nam4rule From Ensembl External Reference Information Type query
1551 ** @nam5rule Str  AJAX String object query
1552 **
1553 ** @argrule  Str  infotype  [const AjPStr] Infotype string
1554 **
1555 ** @valrule * [EnsEExternalreferenceInfotype] Ensembl External Reference
1556 ** Information Type enumeration or ensEExternalreferenceInfotypeNULL
1557 **
1558 ** @fcategory misc
1559 ******************************************************************************/
1560 
1561 
1562 
1563 
1564 /* @func ensExternalreferenceInfotypeFromStr **********************************
1565 **
1566 ** Convert an AJAX String into an Ensembl External Reference Information Type
1567 ** enumeration.
1568 **
1569 ** @param [r] infotype [const AjPStr] Information Type string
1570 **
1571 ** @return [EnsEExternalreferenceInfotype]
1572 ** Ensembl External Reference Information Type enumeration or
1573 ** ensEExternalreferenceInfotypeNULL
1574 **
1575 ** @release 6.4.0
1576 ** @@
1577 ******************************************************************************/
1578 
ensExternalreferenceInfotypeFromStr(const AjPStr infotype)1579 EnsEExternalreferenceInfotype ensExternalreferenceInfotypeFromStr(
1580     const AjPStr infotype)
1581 {
1582     register EnsEExternalreferenceInfotype i =
1583         ensEExternalreferenceInfotypeNULL;
1584 
1585     EnsEExternalreferenceInfotype erit =
1586         ensEExternalreferenceInfotypeNULL;
1587 
1588     for (i = ensEExternalreferenceInfotypeNULL;
1589          externalreferenceKInfotype[i];
1590          i++)
1591         if (ajStrMatchC(infotype, externalreferenceKInfotype[i]))
1592             erit = i;
1593 
1594     if (!erit)
1595         ajDebug("ensExternalreferenceInfotypeFromStr encountered "
1596                 "unexpected string '%S'.\n", infotype);
1597 
1598     return erit;
1599 }
1600 
1601 
1602 
1603 
1604 /* @section Cast **************************************************************
1605 **
1606 ** Functions for returning attributes of an
1607 ** Ensembl External Reference Information Type enumeration.
1608 **
1609 ** @fdata [EnsEExternalreferenceInfotype]
1610 **
1611 ** @nam4rule To   Return Ensembl External Reference Information Type
1612 **                enumeration
1613 ** @nam5rule Char Return C character string value
1614 **
1615 ** @argrule To erit [EnsEExternalreferenceInfotype] Ensembl External
1616 ** Reference Information Type enumeration
1617 **
1618 ** @valrule Char [const char*]  Ensembl External Reference Information Type
1619 **                              C-type (char *) string
1620 **
1621 ** @fcategory cast
1622 ******************************************************************************/
1623 
1624 
1625 
1626 
1627 /* @func ensExternalreferenceInfotypeToChar ***********************************
1628 **
1629 ** Convert an Ensembl External Reference Information Type enumeration into a
1630 ** C-type (char *) string.
1631 **
1632 ** @param [u] erit [EnsEExternalreferenceInfotype] Ensembl External
1633 ** Reference Information Type enumeration
1634 **
1635 ** @return [const char*] Ensembl External Reference Information Type
1636 **                       C-type (char *) string
1637 **
1638 ** @release 6.4.0
1639 ** @@
1640 ******************************************************************************/
1641 
ensExternalreferenceInfotypeToChar(EnsEExternalreferenceInfotype erit)1642 const char* ensExternalreferenceInfotypeToChar(
1643     EnsEExternalreferenceInfotype erit)
1644 {
1645     register EnsEExternalreferenceInfotype i =
1646         ensEExternalreferenceInfotypeNULL;
1647 
1648     for (i = ensEExternalreferenceInfotypeNULL;
1649          externalreferenceKInfotype[i] && (i < erit);
1650          i++);
1651 
1652     if (!externalreferenceKInfotype[i])
1653         ajDebug("ensExternalreferenceInfotypeToChar "
1654                 "encountered an out of boundary error on "
1655                 "Ensembl External Reference Information Type "
1656                 "enumeration %d.\n",
1657                 erit);
1658 
1659     return externalreferenceKInfotype[i];
1660 }
1661 
1662 
1663 
1664 
1665 /* @datasection [EnsEExternalreferenceObjecttype] Ensembl External Reference
1666 ** Object Type
1667 **
1668 ** @nam2rule Externalreference Functions for manipulating
1669 ** Ensembl External Reference objects
1670 ** @nam3rule ExternalreferenceObjecttype Functions for manipulating
1671 ** Ensembl External Reference Object Type enumerations
1672 **
1673 ******************************************************************************/
1674 
1675 
1676 
1677 
1678 /* @section Misc **************************************************************
1679 **
1680 ** Functions for returning an
1681 ** Ensembl External Reference Object Type enumeration.
1682 **
1683 ** @fdata [EnsEExternalreferenceObjecttype]
1684 **
1685 ** @nam4rule From Ensembl External Reference Object Type query
1686 ** @nam5rule Str  AJAX String object query
1687 **
1688 ** @argrule  Str  objecttype [const AjPStr] Object Type string
1689 **
1690 ** @valrule * [EnsEExternalreferenceObjecttype] Ensembl External Reference
1691 ** Object Type enumeration or ensEExternalreferenceObjecttypeNULL
1692 **
1693 ** @fcategory misc
1694 ******************************************************************************/
1695 
1696 
1697 
1698 
1699 /* @func ensExternalreferenceObjecttypeFromStr ********************************
1700 **
1701 ** Convert an AJAX String into an Ensembl External Reference Object Type
1702 ** enumeration.
1703 **
1704 ** @param [r] objecttype [const AjPStr] Object Type string
1705 **
1706 ** @return [EnsEExternalreferenceObjecttype] Ensembl External Reference Object
1707 ** Type enumeration or ensEExternalreferenceObjecttypeNULL
1708 **
1709 ** @release 6.4.0
1710 ** @@
1711 ******************************************************************************/
1712 
ensExternalreferenceObjecttypeFromStr(const AjPStr objecttype)1713 EnsEExternalreferenceObjecttype ensExternalreferenceObjecttypeFromStr(
1714     const AjPStr objecttype)
1715 {
1716     register EnsEExternalreferenceObjecttype i =
1717         ensEExternalreferenceObjecttypeNULL;
1718 
1719     EnsEExternalreferenceObjecttype erot =
1720         ensEExternalreferenceObjecttypeNULL;
1721 
1722     for (i = ensEExternalreferenceObjecttypeNULL;
1723          externalreferenceObjecttype[i];
1724          i++)
1725         if (ajStrMatchC(objecttype, externalreferenceObjecttype[i]))
1726             erot = i;
1727 
1728     if (!erot)
1729         ajDebug("ensExternalreferenceObjecttypeFromStr encountered "
1730                 "unexpected string '%S'.\n", objecttype);
1731 
1732     return erot;
1733 }
1734 
1735 
1736 
1737 
1738 /* @section Cast **************************************************************
1739 **
1740 ** Functions for returning attributes of an
1741 ** Ensembl External Reference Object Type enumeration.
1742 **
1743 ** @fdata [EnsEExternalreferenceObjecttype]
1744 **
1745 ** @nam4rule To   Return Ensembl External Reference Object Type enumeration
1746 ** @nam5rule Char Return C character string value
1747 **
1748 ** @argrule To erot [EnsEExternalreferenceObjecttype] Ensembl External
1749 ** Reference Object Type enumeration
1750 **
1751 ** @valrule Char [const char*] Ensembl External Reference Object Type
1752 **
1753 ** @fcategory cast
1754 ******************************************************************************/
1755 
1756 
1757 
1758 
1759 /* @func ensExternalreferenceObjecttypeToChar *********************************
1760 **
1761 ** Convert an Ensembl External Reference Object Type enumeration into a
1762 ** C-type (char *) string.
1763 **
1764 ** @param [u] erot [EnsEExternalreferenceObjecttype] Ensembl External
1765 ** Reference Object Type enumeration
1766 **
1767 ** @return [const char*] Ensembl External Reference Object Type
1768 **                       C-type (char *) string
1769 **
1770 ** @release 6.4.0
1771 ** @@
1772 ******************************************************************************/
1773 
ensExternalreferenceObjecttypeToChar(EnsEExternalreferenceObjecttype erot)1774 const char* ensExternalreferenceObjecttypeToChar(
1775     EnsEExternalreferenceObjecttype erot)
1776 {
1777     register EnsEExternalreferenceObjecttype i =
1778         ensEExternalreferenceObjecttypeNULL;
1779 
1780     for (i = ensEExternalreferenceObjecttypeNULL;
1781          externalreferenceObjecttype[i] && (i < erot);
1782          i++);
1783 
1784     if (!externalreferenceObjecttype[i])
1785         ajDebug("ensExternalreferenceObjecttypeToChar "
1786                 "encountered an out of boundary error on "
1787                 "Ensembl External Reference Object Type "
1788                 "enumeration %d.\n",
1789                 erot);
1790 
1791     return externalreferenceObjecttype[i];
1792 }
1793 
1794 
1795 
1796 
1797 /* @datasection [EnsPIdentityreference] Ensembl Identity Reference ************
1798 **
1799 ** @nam2rule Identityreference Functions for manipulating
1800 ** Ensembl Identity Reference objects
1801 **
1802 ** @cc Bio::EnsEMBL::IdentityXref
1803 ** @cc CVS Revision: 1.19
1804 ** @cc CVS Tag: branch-ensembl-68
1805 **
1806 ******************************************************************************/
1807 
1808 
1809 
1810 
1811 /* @section constructors ******************************************************
1812 **
1813 ** All constructors return a new Ensembl Identity Reference by pointer.
1814 ** It is the responsibility of the user to first destroy any previous
1815 ** Identity Reference. The target pointer does not need to be initialised to
1816 ** NULL, but it is good programming practice to do so anyway.
1817 **
1818 ** @fdata [EnsPIdentityreference]
1819 **
1820 ** @nam3rule New Constructor
1821 ** @nam4rule Cpy Constructor with existing object
1822 ** @nam4rule Ini Constructor with initial values
1823 ** @nam4rule Ref Constructor by incrementing the reference counter
1824 **
1825 ** @argrule Cpy ir [const EnsPIdentityreference] Ensembl Identity Reference
1826 ** @argrule Ini cigar [AjPStr] Cigar line
1827 ** @argrule Ini qstart [ajint] Query start coordinate
1828 ** @argrule Ini qend [ajint] Query end coordinate
1829 ** @argrule Ini qidentity [ajint] Query sequence identity
1830 ** @argrule Ini tstart [ajint] Target start coordinate
1831 ** @argrule Ini tend [ajint] Target end coordinate
1832 ** @argrule Ini tidentity [ajint] Target sequence identity
1833 ** @argrule Ini score [double] Alignment score
1834 ** @argrule Ini evalue [double] Expectation value
1835 ** @argrule Ref ir [EnsPIdentityreference] Ensembl Identity Reference
1836 **
1837 ** @valrule * [EnsPIdentityreference] Ensembl Identity Reference or NULL
1838 **
1839 ** @fcategory new
1840 ******************************************************************************/
1841 
1842 
1843 
1844 
1845 /* @func ensIdentityreferenceNewCpy *******************************************
1846 **
1847 ** Object-based constructor function, which returns an independent object.
1848 **
1849 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
1850 **
1851 ** @return [EnsPIdentityreference] Ensembl Identity Reference or NULL
1852 **
1853 ** @release 6.4.0
1854 ** @@
1855 ******************************************************************************/
1856 
ensIdentityreferenceNewCpy(const EnsPIdentityreference ir)1857 EnsPIdentityreference ensIdentityreferenceNewCpy(
1858     const EnsPIdentityreference ir)
1859 {
1860     EnsPIdentityreference pthis = NULL;
1861 
1862     if (!ir)
1863         return NULL;
1864 
1865     AJNEW0(pthis);
1866 
1867     if (ir->Cigar)
1868         pthis->Cigar = ajStrNewRef(ir->Cigar);
1869 
1870     pthis->QueryStart     = ir->QueryStart;
1871     pthis->QueryEnd       = ir->QueryEnd;
1872     pthis->QueryIdentity  = ir->QueryIdentity;
1873     pthis->TargetStart    = ir->TargetStart;
1874     pthis->TargetEnd      = ir->TargetEnd;
1875     pthis->TargetIdentity = ir->TargetIdentity;
1876     pthis->Use            = 1U;
1877     pthis->Evalue         = ir->Evalue;
1878     pthis->Score          = ir->Score;
1879 
1880     return pthis;
1881 }
1882 
1883 
1884 
1885 
1886 /* @func ensIdentityreferenceNewIni *******************************************
1887 **
1888 ** Constructor for an Ensembl Identity Reference with initial values.
1889 **
1890 ** @cc Bio::EnsEMBL::IdentityXref::new
1891 ** @param [u] cigar [AjPStr] Cigar line
1892 ** @param [r] qstart [ajint] Query start coordinate
1893 ** @param [r] qend [ajint] Query end coordinate
1894 ** @param [r] qidentity [ajint] Query sequence identity
1895 ** @param [r] tstart [ajint] Target start coordinate
1896 ** @param [r] tend [ajint] Target end coordinate
1897 ** @param [r] tidentity [ajint] Target sequence identity
1898 ** @param [r] score [double] Alignment score
1899 ** @param [r] evalue [double] Expectation value
1900 **
1901 ** @return [EnsPIdentityreference] Ensembl Identity Reference or NULL
1902 **
1903 ** @release 6.4.0
1904 ** @@
1905 ******************************************************************************/
1906 
ensIdentityreferenceNewIni(AjPStr cigar,ajint qstart,ajint qend,ajint qidentity,ajint tstart,ajint tend,ajint tidentity,double score,double evalue)1907 EnsPIdentityreference ensIdentityreferenceNewIni(AjPStr cigar,
1908                                                  ajint qstart,
1909                                                  ajint qend,
1910                                                  ajint qidentity,
1911                                                  ajint tstart,
1912                                                  ajint tend,
1913                                                  ajint tidentity,
1914                                                  double score,
1915                                                  double evalue)
1916 {
1917     EnsPIdentityreference ir = NULL;
1918 
1919     AJNEW0(ir);
1920 
1921     if (cigar)
1922         ir->Cigar = ajStrNewRef(cigar);
1923     else
1924         ir->Cigar = ajStrNew();
1925 
1926     ir->QueryStart     = qstart;
1927     ir->QueryEnd       = qend;
1928     ir->QueryIdentity  = qidentity;
1929     ir->TargetStart    = tstart;
1930     ir->TargetEnd      = tend;
1931     ir->TargetIdentity = tidentity;
1932     ir->Score          = score;
1933     ir->Evalue         = evalue;
1934 
1935     return ir;
1936 }
1937 
1938 
1939 
1940 
1941 /* @func ensIdentityreferenceNewRef *******************************************
1942 **
1943 ** Ensembl Object referencing function, which returns a pointer to the
1944 ** Ensembl Object passed in and increases its reference count.
1945 **
1946 ** @param [u] ir [EnsPIdentityreference] Ensembl Identity Reference
1947 **
1948 ** @return [EnsPIdentityreference] Ensembl Identity Reference or NULL
1949 **
1950 ** @release 6.4.0
1951 ** @@
1952 ******************************************************************************/
1953 
ensIdentityreferenceNewRef(EnsPIdentityreference ir)1954 EnsPIdentityreference ensIdentityreferenceNewRef(
1955     EnsPIdentityreference ir)
1956 {
1957     if (!ir)
1958         return NULL;
1959 
1960     ir->Use++;
1961 
1962     return ir;
1963 }
1964 
1965 
1966 
1967 
1968 /* @section destructors *******************************************************
1969 **
1970 ** Destruction destroys all internal data structures and frees the memory
1971 ** allocated for an Ensembl Identity Reference object.
1972 **
1973 ** @fdata [EnsPIdentityreference]
1974 **
1975 ** @nam3rule Del Destroy (free) an Ensembl Identity Reference
1976 **
1977 ** @argrule * Pir [EnsPIdentityreference*] Ensembl Identity Reference address
1978 **
1979 ** @valrule * [void]
1980 **
1981 ** @fcategory delete
1982 ******************************************************************************/
1983 
1984 
1985 
1986 
1987 /* @func ensIdentityreferenceDel **********************************************
1988 **
1989 ** Default destructor for an Ensembl Identity Reference.
1990 **
1991 ** @param [d] Pir [EnsPIdentityreference*] Ensembl Identity Reference address
1992 **
1993 ** @return [void]
1994 **
1995 ** @release 6.2.0
1996 ** @@
1997 ******************************************************************************/
1998 
ensIdentityreferenceDel(EnsPIdentityreference * Pir)1999 void ensIdentityreferenceDel(EnsPIdentityreference *Pir)
2000 {
2001     EnsPIdentityreference pthis = NULL;
2002 
2003     if (!Pir)
2004         return;
2005 
2006 #if defined(AJ_DEBUG) && AJ_DEBUG >= 1
2007     if (ajDebugTest("ensIdentityreferenceDel"))
2008     {
2009         ajDebug("ensIdentityreferenceDel\n"
2010                 "  *Pir %p\n",
2011                 *Pir);
2012 
2013         ensIdentityreferenceTrace(*Pir, 1);
2014     }
2015 #endif /* defined(AJ_DEBUG) && AJ_DEBUG >= 1 */
2016 
2017     if (!(pthis = *Pir) || --pthis->Use)
2018     {
2019         *Pir = NULL;
2020 
2021         return;
2022     }
2023 
2024     ajStrDel(&pthis->Cigar);
2025 
2026     ajMemFree((void **) Pir);
2027 
2028     return;
2029 }
2030 
2031 
2032 
2033 
2034 /* @section member retrieval **************************************************
2035 **
2036 ** Functions for returning members of an Ensembl Identity Reference object.
2037 **
2038 ** @fdata [EnsPIdentityreference]
2039 **
2040 ** @nam3rule Get Get attribute
2041 ** @nam4rule Cigar Return the CIGAR line
2042 ** @nam4rule Evalue Return the e-value
2043 ** @nam4rule Query Return query members
2044 ** @nam5rule End Return the query end
2045 ** @nam5rule Identity Return the query identity
2046 ** @nam4rule Score Return the score
2047 ** @nam4rule Target Return target members
2048 ** @nam5rule Start Return the query start
2049 ** @nam5rule End Return the target end
2050 ** @nam5rule Identity Return the target identity
2051 ** @nam5rule Start Return the target start
2052 **
2053 ** @argrule * ir [const EnsPIdentityreference] Identity Reference
2054 **
2055 ** @valrule Cigar [AjPStr] Cigar line or NULL
2056 ** @valrule Evalue [double] E-value or 0.0
2057 ** @valrule QueryEnd [ajint] Query end or 0
2058 ** @valrule QueryIdentity [ajint] Query identity or 0
2059 ** @valrule QueryStart [ajint] Query start or 0
2060 ** @valrule Score [double] Score or 0.0
2061 ** @valrule TargetEnd [ajint] Target end or 0
2062 ** @valrule TargetIdentity [ajint] Target identity or 0
2063 ** @valrule TargetStart [ajint] Target start or 0
2064 **
2065 ** @fcategory use
2066 ******************************************************************************/
2067 
2068 
2069 
2070 
2071 /* @func ensIdentityreferenceGetCigar *****************************************
2072 **
2073 ** Get the CIGAR line member of an Ensembl Identity Reference.
2074 **
2075 ** @cc Bio::EnsEMBL::IdentityXref::cigar_line
2076 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
2077 **
2078 ** @return [AjPStr] CIGAR line or NULL
2079 **
2080 ** @release 6.2.0
2081 ** @@
2082 ******************************************************************************/
2083 
ensIdentityreferenceGetCigar(const EnsPIdentityreference ir)2084 AjPStr ensIdentityreferenceGetCigar(const EnsPIdentityreference ir)
2085 {
2086     return (ir) ? ir->Cigar : NULL;
2087 }
2088 
2089 
2090 
2091 
2092 /* @func ensIdentityreferenceGetEvalue ****************************************
2093 **
2094 ** Get the e-value member of an Ensembl Identity Reference.
2095 **
2096 ** @cc Bio::EnsEMBL::IdentityXref::evalue
2097 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
2098 **
2099 ** @return [double] E-value or 0.0
2100 **
2101 ** @release 6.2.0
2102 ** @@
2103 ******************************************************************************/
2104 
ensIdentityreferenceGetEvalue(const EnsPIdentityreference ir)2105 double ensIdentityreferenceGetEvalue(const EnsPIdentityreference ir)
2106 {
2107     return (ir) ? ir->Evalue : 0.0;
2108 }
2109 
2110 
2111 
2112 
2113 
2114 /* @func ensIdentityreferenceGetQueryEnd **************************************
2115 **
2116 ** Get the query end member of an Ensembl Identity Reference.
2117 **
2118 ** @cc Bio::EnsEMBL::IdentityXref::xref_end
2119 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
2120 **
2121 ** @return [ajint] Query end or 0
2122 **
2123 ** @release 6.2.0
2124 ** @@
2125 ******************************************************************************/
2126 
ensIdentityreferenceGetQueryEnd(const EnsPIdentityreference ir)2127 ajint ensIdentityreferenceGetQueryEnd(const EnsPIdentityreference ir)
2128 {
2129     return (ir) ? ir->QueryEnd : 0;
2130 }
2131 
2132 
2133 
2134 
2135 /* @func ensIdentityreferenceGetQueryIdentity *********************************
2136 **
2137 ** Get the query identity member of an Ensembl Identity Reference.
2138 **
2139 ** @cc Bio::EnsEMBL::IdentityXref::xref_identity
2140 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
2141 **
2142 ** @return [ajint] Query identity or 0
2143 **
2144 ** @release 6.2.0
2145 ** @@
2146 ******************************************************************************/
2147 
ensIdentityreferenceGetQueryIdentity(const EnsPIdentityreference ir)2148 ajint ensIdentityreferenceGetQueryIdentity(const EnsPIdentityreference ir)
2149 {
2150     return (ir) ? ir->QueryIdentity : 0;
2151 }
2152 
2153 
2154 
2155 
2156 /* @func ensIdentityreferenceGetQueryStart ************************************
2157 **
2158 ** Get the query start member of an Ensembl Identity Reference.
2159 **
2160 ** @cc Bio::EnsEMBL::IdentityXref::xref_start
2161 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
2162 **
2163 ** @return [ajint] Query start or 0
2164 **
2165 ** @release 6.2.0
2166 ** @@
2167 ******************************************************************************/
2168 
ensIdentityreferenceGetQueryStart(const EnsPIdentityreference ir)2169 ajint ensIdentityreferenceGetQueryStart(const EnsPIdentityreference ir)
2170 {
2171     return (ir) ? ir->QueryStart : 0;
2172 }
2173 
2174 
2175 
2176 
2177 /* @func ensIdentityreferenceGetScore *****************************************
2178 **
2179 ** Get the score member of an Ensembl Identity Reference.
2180 **
2181 ** @cc Bio::EnsEMBL::IdentityXref::score
2182 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
2183 **
2184 ** @return [double] Score or 0.0
2185 **
2186 ** @release 6.2.0
2187 ** @@
2188 ******************************************************************************/
2189 
ensIdentityreferenceGetScore(const EnsPIdentityreference ir)2190 double ensIdentityreferenceGetScore(const EnsPIdentityreference ir)
2191 {
2192     return (ir) ? ir->Score : 0.0;
2193 }
2194 
2195 
2196 
2197 
2198 /* @func ensIdentityreferenceGetTargetEnd *************************************
2199 **
2200 ** Get the target end member of an Ensembl Identity Reference.
2201 **
2202 ** @cc Bio::EnsEMBL::IdentityXref::ensembl_end
2203 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
2204 **
2205 ** @return [ajint] Target end or 0
2206 **
2207 ** @release 6.3.0
2208 ** @@
2209 ******************************************************************************/
2210 
ensIdentityreferenceGetTargetEnd(const EnsPIdentityreference ir)2211 ajint ensIdentityreferenceGetTargetEnd(const EnsPIdentityreference ir)
2212 {
2213     return (ir) ? ir->TargetEnd : 0;
2214 }
2215 
2216 
2217 
2218 
2219 /* @func ensIdentityreferenceGetTargetIdentity ********************************
2220 **
2221 ** Get the target identity member of an Ensembl Identity Reference.
2222 **
2223 ** @cc Bio::EnsEMBL::IdentityXref::ensembl_identity
2224 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
2225 **
2226 ** @return [ajint] Target identity or 0
2227 **
2228 ** @release 6.2.0
2229 ** @@
2230 ******************************************************************************/
2231 
ensIdentityreferenceGetTargetIdentity(const EnsPIdentityreference ir)2232 ajint ensIdentityreferenceGetTargetIdentity(const EnsPIdentityreference ir)
2233 {
2234     return (ir) ? ir->TargetIdentity : 0;
2235 }
2236 
2237 
2238 
2239 
2240 /* @func ensIdentityreferenceGetTargetStart ***********************************
2241 **
2242 ** Get the target start member of an Ensembl Identity Reference.
2243 **
2244 ** @cc Bio::EnsEMBL::IdentityXref::ensembl_start
2245 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
2246 **
2247 ** @return [ajint] Target start or 0
2248 **
2249 ** @release 6.2.0
2250 ** @@
2251 ******************************************************************************/
2252 
ensIdentityreferenceGetTargetStart(const EnsPIdentityreference ir)2253 ajint ensIdentityreferenceGetTargetStart(const EnsPIdentityreference ir)
2254 {
2255     return (ir) ? ir->TargetStart : 0;
2256 }
2257 
2258 
2259 
2260 
2261 /* @section member assignment *************************************************
2262 **
2263 ** Functions for assigning members of an Ensembl Identity Reference object.
2264 **
2265 ** @fdata [EnsPIdentityreference]
2266 **
2267 ** @nam3rule Set Set one member of an Ensembl Identity Reference
2268 ** @nam4rule Cigar Set the CIGAR line
2269 ** @nam4rule Evalue Set the e-value
2270 ** @nam4rule Query Set query members
2271 ** @nam5rule End Set the query end
2272 ** @nam5rule Identity Set the query identity
2273 ** @nam5rule Start Set the query start
2274 ** @nam4rule Score Set the score
2275 ** @nam4rule Target Set target members
2276 ** @nam5rule End Set the target end
2277 ** @nam5rule Identity Set the target identity
2278 ** @nam5rule Start Set the target start
2279 **
2280 ** @argrule * ir [EnsPIdentityreference] Ensembl Identity Reference object
2281 ** @argrule Cigar cigar [AjPStr] CIGAR-line
2282 ** @argrule Evalue evalue [double] E-value
2283 ** @argrule QueryEnd qend [ajint] Query end
2284 ** @argrule QueryIdentity qidentity [ajint] Query identity
2285 ** @argrule QueryStart qstart [ajint] Query start
2286 ** @argrule Score score [double] Score
2287 ** @argrule TargetEnd tend [ajint] Target end
2288 ** @argrule TargetIdentity tidentity [ajint] Target identity
2289 ** @argrule TargetStart tstart [ajint] Target start
2290 **
2291 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
2292 **
2293 ** @fcategory modify
2294 ******************************************************************************/
2295 
2296 
2297 
2298 
2299 /* @func ensIdentityreferenceSetCigar *****************************************
2300 **
2301 ** Set the CIGAR-line member of an Ensembl Identity Reference.
2302 **
2303 ** @cc Bio::EnsEMBL::IdentityXref::cigar_line
2304 ** @param [u] ir [EnsPIdentityreference] Ensembl Identity Reference
2305 ** @param [u] cigar [AjPStr] CIGAR-line
2306 **
2307 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2308 **
2309 ** @release 6.2.0
2310 ** @@
2311 ******************************************************************************/
2312 
ensIdentityreferenceSetCigar(EnsPIdentityreference ir,AjPStr cigar)2313 AjBool ensIdentityreferenceSetCigar(EnsPIdentityreference ir,
2314                                     AjPStr cigar)
2315 {
2316     if (!ir)
2317         return ajFalse;
2318 
2319     ajStrDel(&ir->Cigar);
2320 
2321     ir->Cigar = ajStrNewRef(cigar);
2322 
2323     return ajTrue;
2324 }
2325 
2326 
2327 
2328 
2329 /* @func ensIdentityreferenceSetEvalue ****************************************
2330 **
2331 ** Set the e-value member of an Ensembl Identity Reference.
2332 **
2333 ** @cc Bio::EnsEMBL::IdentityXref::evalue
2334 ** @param [u] ir [EnsPIdentityreference] Ensembl Identity Reference
2335 ** @param [r] evalue [double] E-value
2336 **
2337 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2338 **
2339 ** @release 6.2.0
2340 ** @@
2341 ******************************************************************************/
2342 
ensIdentityreferenceSetEvalue(EnsPIdentityreference ir,double evalue)2343 AjBool ensIdentityreferenceSetEvalue(EnsPIdentityreference ir,
2344                                      double evalue)
2345 {
2346     if (!ir)
2347         return ajFalse;
2348 
2349     ir->Evalue = evalue;
2350 
2351     return ajTrue;
2352 }
2353 
2354 
2355 
2356 
2357 /* @func ensIdentityreferenceSetQueryEnd **************************************
2358 **
2359 ** Set the query end member of an Ensembl Identity Reference.
2360 **
2361 ** @cc Bio::EnsEMBL::IdentityXref::xref_end
2362 ** @param [u] ir [EnsPIdentityreference] Ensembl Identity Reference
2363 ** @param [r] qend [ajint] Query end
2364 **
2365 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2366 **
2367 ** @release 6.2.0
2368 ** @@
2369 ******************************************************************************/
2370 
ensIdentityreferenceSetQueryEnd(EnsPIdentityreference ir,ajint qend)2371 AjBool ensIdentityreferenceSetQueryEnd(EnsPIdentityreference ir,
2372                                        ajint qend)
2373 {
2374     if (!ir)
2375         return ajFalse;
2376 
2377     ir->QueryEnd = qend;
2378 
2379     return ajTrue;
2380 }
2381 
2382 
2383 
2384 
2385 /* @func ensIdentityreferenceSetQueryIdentity *********************************
2386 **
2387 ** Set the query identity member of an Ensembl Identity Reference.
2388 **
2389 ** @cc Bio::EnsEMBL::IdentityXref::xref_identity
2390 ** @param [u] ir [EnsPIdentityreference] Ensembl Identity Reference
2391 ** @param [r] qidentity [ajint] Query identity
2392 **
2393 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2394 **
2395 ** @release 6.2.0
2396 ** @@
2397 ******************************************************************************/
2398 
ensIdentityreferenceSetQueryIdentity(EnsPIdentityreference ir,ajint qidentity)2399 AjBool ensIdentityreferenceSetQueryIdentity(EnsPIdentityreference ir,
2400                                             ajint qidentity)
2401 {
2402     if (!ir)
2403         return ajFalse;
2404 
2405     ir->QueryIdentity = qidentity;
2406 
2407     return ajTrue;
2408 }
2409 
2410 
2411 
2412 
2413 /* @func ensIdentityreferenceSetQueryStart ************************************
2414 **
2415 ** Set the query start member of an Ensembl Identity Reference.
2416 **
2417 ** @cc Bio::EnsEMBL::IdentityXref::xref_start
2418 ** @param [u] ir [EnsPIdentityreference] Ensembl Identity Reference
2419 ** @param [r] qstart [ajint] Query start
2420 **
2421 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2422 **
2423 ** @release 6.2.0
2424 ** @@
2425 ******************************************************************************/
2426 
ensIdentityreferenceSetQueryStart(EnsPIdentityreference ir,ajint qstart)2427 AjBool ensIdentityreferenceSetQueryStart(EnsPIdentityreference ir,
2428                                          ajint qstart)
2429 {
2430     if (!ir)
2431         return ajFalse;
2432 
2433     ir->QueryStart = qstart;
2434 
2435     return ajTrue;
2436 }
2437 
2438 
2439 
2440 
2441 /* @func ensIdentityreferenceSetScore *****************************************
2442 **
2443 ** Set the score member of an Ensembl Identity Reference.
2444 **
2445 ** @cc Bio::EnsEMBL::IdentityXref::score
2446 ** @param [u] ir [EnsPIdentityreference] Ensembl Identity Reference
2447 ** @param [r] score [double] Score
2448 **
2449 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2450 **
2451 ** @release 6.2.0
2452 ** @@
2453 ******************************************************************************/
2454 
ensIdentityreferenceSetScore(EnsPIdentityreference ir,double score)2455 AjBool ensIdentityreferenceSetScore(EnsPIdentityreference ir,
2456                                     double score)
2457 {
2458     if (!ir)
2459         return ajFalse;
2460 
2461     ir->Score = score;
2462 
2463     return ajTrue;
2464 }
2465 
2466 
2467 
2468 
2469 /* @func ensIdentityreferenceSetTargetEnd *************************************
2470 **
2471 ** Set the target end member of an Ensembl Identity Reference.
2472 **
2473 ** @cc Bio::EnsEMBL::IdentityXref::ensembl_end
2474 ** @param [u] ir [EnsPIdentityreference] Ensembl Identity Reference
2475 ** @param [r] tend [ajint] Target end
2476 **
2477 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2478 **
2479 ** @release 6.2.0
2480 ** @@
2481 ******************************************************************************/
2482 
ensIdentityreferenceSetTargetEnd(EnsPIdentityreference ir,ajint tend)2483 AjBool ensIdentityreferenceSetTargetEnd(EnsPIdentityreference ir,
2484                                         ajint tend)
2485 {
2486     if (!ir)
2487         return ajFalse;
2488 
2489     ir->TargetEnd = tend;
2490 
2491     return ajTrue;
2492 }
2493 
2494 
2495 
2496 
2497 /* @func ensIdentityreferenceSetTargetIdentity ********************************
2498 **
2499 ** Set the target identity member of an Ensembl Identity Reference.
2500 **
2501 ** @cc Bio::EnsEMBL::IdentityXref::ensembl_identity
2502 ** @param [u] ir [EnsPIdentityreference] Ensembl Identity Reference
2503 ** @param [r] tidentity [ajint] Target identity
2504 **
2505 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2506 **
2507 ** @release 6.2.0
2508 ** @@
2509 ******************************************************************************/
2510 
ensIdentityreferenceSetTargetIdentity(EnsPIdentityreference ir,ajint tidentity)2511 AjBool ensIdentityreferenceSetTargetIdentity(EnsPIdentityreference ir,
2512                                              ajint tidentity)
2513 {
2514     if (!ir)
2515         return ajFalse;
2516 
2517     ir->TargetIdentity = tidentity;
2518 
2519     return ajTrue;
2520 }
2521 
2522 
2523 
2524 
2525 /* @func ensIdentityreferenceSetTargetStart ***********************************
2526 **
2527 ** Set the target start member of an Ensembl Identity Reference.
2528 **
2529 ** @cc Bio::EnsEMBL::IdentityXref::ensembl_start
2530 ** @param [u] ir [EnsPIdentityreference] Ensembl Identity Reference
2531 ** @param [r] tstart [ajint] Target start
2532 **
2533 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2534 **
2535 ** @release 6.2.0
2536 ** @@
2537 ******************************************************************************/
2538 
ensIdentityreferenceSetTargetStart(EnsPIdentityreference ir,ajint tstart)2539 AjBool ensIdentityreferenceSetTargetStart(EnsPIdentityreference ir,
2540                                           ajint tstart)
2541 {
2542     if (!ir)
2543         return ajFalse;
2544 
2545     ir->TargetStart = tstart;
2546 
2547     return ajTrue;
2548 }
2549 
2550 
2551 
2552 
2553 /* @section debugging *********************************************************
2554 **
2555 ** Functions for reporting of an Ensembl Identity Reference object.
2556 **
2557 ** @fdata [EnsPIdentityreference]
2558 **
2559 ** @nam3rule Trace Report Ensembl Identity Reference members to debug file
2560 **
2561 ** @argrule Trace ir [const EnsPIdentityreference] Ensembl Identity Reference
2562 ** @argrule Trace level [ajuint] Indentation level
2563 **
2564 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
2565 **
2566 ** @fcategory misc
2567 ******************************************************************************/
2568 
2569 
2570 
2571 
2572 /* @func ensIdentityreferenceTrace ********************************************
2573 **
2574 ** Trace an Ensembl Identity Reference.
2575 **
2576 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
2577 ** @param [r] level [ajuint] Indentation level
2578 **
2579 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2580 **
2581 ** @release 6.2.0
2582 ** @@
2583 ******************************************************************************/
2584 
ensIdentityreferenceTrace(const EnsPIdentityreference ir,ajuint level)2585 AjBool ensIdentityreferenceTrace(const EnsPIdentityreference ir, ajuint level)
2586 {
2587     AjPStr indent = NULL;
2588 
2589     if (!ir)
2590         return ajFalse;
2591 
2592     indent = ajStrNew();
2593 
2594     ajStrAppendCountK(&indent, ' ', level * 2);
2595 
2596     ajDebug("%SensIdentityreferenceTrace %p\n"
2597             "%S  Cigar '%S'\n"
2598             "%S  QueryStart %d\n"
2599             "%S  QueryEnd %d\n"
2600             "%S  QueryIdentity %d\n"
2601             "%S  TargetStart %d\n"
2602             "%S  TargetEnd %d\n"
2603             "%S  TargetIdentity %d\n",
2604             "%S  Use %u\n"
2605             "%S  Evalue %f\n"
2606             "%S  Score %f\n",
2607             indent, ir,
2608             indent, ir->Cigar,
2609             indent, ir->QueryStart,
2610             indent, ir->QueryEnd,
2611             indent, ir->QueryIdentity,
2612             indent, ir->TargetStart,
2613             indent, ir->TargetEnd,
2614             indent, ir->TargetIdentity,
2615             indent, ir->Use,
2616             indent, ir->Evalue,
2617             indent, ir->Score);
2618 
2619     ajStrDel(&indent);
2620 
2621     return ajTrue;
2622 }
2623 
2624 
2625 
2626 
2627 /* @section calculate *********************************************************
2628 **
2629 ** Functions for calculating information from an
2630 ** Ensembl Identity Reference object.
2631 **
2632 ** @fdata [EnsPIdentityreference]
2633 **
2634 ** @nam3rule Calculate Calculate Ensembl Identity Reference information
2635 ** @nam4rule Memsize Calculate the memory size in bytes
2636 **
2637 ** @argrule * ir [const EnsPIdentityreference] Ensembl Identity Reference
2638 **
2639 ** @valrule Memsize [size_t] Memory size in bytes or 0
2640 **
2641 ** @fcategory misc
2642 ******************************************************************************/
2643 
2644 
2645 
2646 
2647 /* @func ensIdentityreferenceCalculateMemsize *********************************
2648 **
2649 ** Calculate the memory size in bytes of an Ensembl Identity Reference.
2650 **
2651 ** @param [r] ir [const EnsPIdentityreference] Ensembl Identity Reference
2652 **
2653 ** @return [size_t] Memory size in bytes or 0
2654 **
2655 ** @release 6.4.0
2656 ** @@
2657 ******************************************************************************/
2658 
ensIdentityreferenceCalculateMemsize(const EnsPIdentityreference ir)2659 size_t ensIdentityreferenceCalculateMemsize(const EnsPIdentityreference ir)
2660 {
2661     size_t size = 0;
2662 
2663     if (!ir)
2664         return 0;
2665 
2666     size += sizeof (EnsOIdentityreference);
2667 
2668     if (ir->Cigar)
2669     {
2670         size += sizeof (AjOStr);
2671 
2672         size += ajStrGetRes(ir->Cigar);
2673     }
2674 
2675     return size;
2676 }
2677 
2678 
2679 
2680 
2681 /* @datasection [EnsPOntologylinkage] Ensembl Ontology Linkage ****************
2682 **
2683 ** @nam2rule Ontologylinkage Functions for manipulating
2684 ** Ensembl Ontology Linkage objects
2685 **
2686 ** @cc Bio::EnsEMBL::OntologyXref
2687 ** @cc CVS Revision: 1.5
2688 ** @cc CVS Tag: branch-ensembl-68
2689 **
2690 ******************************************************************************/
2691 
2692 
2693 
2694 
2695 /* @section constructors ******************************************************
2696 **
2697 ** All constructors return a new Ensembl Ontology Linkage by pointer.
2698 ** It is the responsibility of the user to first destroy any previous
2699 ** Ontology Linkage. The target pointer does not need to be initialised to
2700 ** NULL, but it is good programming practice to do so anyway.
2701 **
2702 ** @fdata [EnsPOntologylinkage]
2703 **
2704 ** @nam3rule New Constructor
2705 ** @nam4rule Cpy Constructor with existing object
2706 ** @nam4rule Ini Constructor with initial values
2707 ** @nam4rule Ref Constructor by incrementing the reference counter
2708 **
2709 ** @argrule Cpy ol [const EnsPOntologylinkage] Ensembl Ontology Linkage
2710 ** @argrule Ini linkagetype [AjPStr] Linkage type
2711 ** @argrule Ini source [EnsPDatabaseentry] Source Ensembl Database Entry
2712 ** @argrule Ref ol [EnsPOntologylinkage] Ensembl Ontology Linkage
2713 **
2714 ** @valrule * [EnsPOntologylinkage] Ensembl Ontology Linkage or NULL
2715 **
2716 ** @fcategory new
2717 ******************************************************************************/
2718 
2719 
2720 
2721 
2722 /* @func ensOntologylinkageNewCpy *********************************************
2723 **
2724 ** Object-based constructor function, which returns an independent object.
2725 **
2726 ** @param [r] ol [const EnsPOntologylinkage] Ensembl Ontology Linkage
2727 **
2728 ** @return [EnsPOntologylinkage] Ensembl Ontology Linkage or NULL
2729 **
2730 ** @release 6.4.0
2731 ** @@
2732 ******************************************************************************/
2733 
ensOntologylinkageNewCpy(const EnsPOntologylinkage ol)2734 EnsPOntologylinkage ensOntologylinkageNewCpy(
2735     const EnsPOntologylinkage ol)
2736 {
2737     EnsPOntologylinkage pthis = NULL;
2738 
2739     if (!ol)
2740         return NULL;
2741 
2742     AJNEW0(pthis);
2743 
2744     pthis->LinkageType = ajStrNewRef(ol->LinkageType);
2745     pthis->Source      = ensDatabaseentryNewCpy(ol->Source);
2746 
2747     pthis->Use = 1U;
2748 
2749     return pthis;
2750 }
2751 
2752 
2753 
2754 
2755 /* @func ensOntologylinkageNewIni *********************************************
2756 **
2757 ** Constructor for an Ensembl Ontology Linkage with initial values.
2758 **
2759 ** @param [u] linkagetype [AjPStr] Linkage type
2760 ** @param [u] source [EnsPDatabaseentry] Source Ensembl Database Entry
2761 **
2762 ** @return [EnsPOntologylinkage] Ensembl Ontology Linkage or NULL
2763 **
2764 ** @release 6.4.0
2765 ** @@
2766 ******************************************************************************/
2767 
ensOntologylinkageNewIni(AjPStr linkagetype,EnsPDatabaseentry source)2768 EnsPOntologylinkage ensOntologylinkageNewIni(
2769     AjPStr linkagetype,
2770     EnsPDatabaseentry source)
2771 {
2772     EnsPOntologylinkage ol = NULL;
2773 
2774     if (ajDebugTest("ensOntologylinkageNewIni"))
2775     {
2776         ajDebug("ensOntologylinkageNewIni\n"
2777                 "  linkagetype '%S'\n"
2778                 "  source %p\n",
2779                 linkagetype,
2780                 source);
2781 
2782         ensDatabaseentryTrace(source, 1);
2783     }
2784 
2785     if (!linkagetype)
2786         return NULL;
2787 
2788     AJNEW0(ol);
2789 
2790     ol->LinkageType = ajStrNewRef(linkagetype);
2791     ol->Source      = ensDatabaseentryNewRef(source);
2792 
2793     ol->Use = 1U;
2794 
2795     return ol;
2796 }
2797 
2798 
2799 
2800 
2801 /* @func ensOntologylinkageNewRef *********************************************
2802 **
2803 ** Ensembl Object referencing function, which returns a pointer to the
2804 ** Ensembl Object passed in and increases its reference count.
2805 **
2806 ** @param [u] ol [EnsPOntologylinkage] Ensembl Ontology Linkage
2807 **
2808 ** @return [EnsPOntologylinkage] Ensembl Ontology Linkage or NULL
2809 **
2810 ** @release 6.4.0
2811 ** @@
2812 ******************************************************************************/
2813 
ensOntologylinkageNewRef(EnsPOntologylinkage ol)2814 EnsPOntologylinkage ensOntologylinkageNewRef(
2815     EnsPOntologylinkage ol)
2816 {
2817     if (!ol)
2818         return NULL;
2819 
2820     ol->Use++;
2821 
2822     return ol;
2823 }
2824 
2825 
2826 
2827 
2828 /* @section destructors *******************************************************
2829 **
2830 ** Destruction destroys all internal data structures and frees the memory
2831 ** allocated for an Ensembl Ontology Linkage object.
2832 **
2833 ** @fdata [EnsPOntologylinkage]
2834 **
2835 ** @nam3rule Del Destroy (free) an Ensembl Ontology Linkage
2836 **
2837 ** @argrule * Pol [EnsPOntologylinkage*] Ensembl Ontology Linkage address
2838 **
2839 ** @valrule * [void]
2840 **
2841 ** @fcategory delete
2842 ******************************************************************************/
2843 
2844 
2845 
2846 
2847 /* @func ensOntologylinkageDel ************************************************
2848 **
2849 ** Default destructor for an Ensembl Ontology Linkage.
2850 **
2851 ** @param [d] Pol [EnsPOntologylinkage*] Ensembl Ontology Linkage address
2852 **
2853 ** @return [void]
2854 **
2855 ** @release 6.4.0
2856 ** @@
2857 ******************************************************************************/
2858 
ensOntologylinkageDel(EnsPOntologylinkage * Pol)2859 void ensOntologylinkageDel(EnsPOntologylinkage *Pol)
2860 {
2861     EnsPOntologylinkage pthis = NULL;
2862 
2863     if (!Pol)
2864         return;
2865 
2866 #if defined(AJ_DEBUG) && AJ_DEBUG >= 1
2867     if (ajDebugTest("ensOntologylinkageDel"))
2868         ajDebug("ensOntologylinkageDel\n"
2869                 " *Pol %p\n",
2870                 *Pol);
2871 #endif /* defined(AJ_DEBUG) && AJ_DEBUG >= 1 */
2872 
2873     if (!(pthis = *Pol) || --pthis->Use)
2874     {
2875         *Pol = NULL;
2876 
2877         return;
2878     }
2879 
2880     ajStrDel(&pthis->LinkageType);
2881 
2882     ensDatabaseentryDel(&pthis->Source);
2883 
2884     ajMemFree((void **) Pol);
2885 
2886     return;
2887 }
2888 
2889 
2890 
2891 
2892 /* @datasection [EnsEOntologylinkageType] Ensembl Ontology Linkage Type *******
2893 **
2894 ** @nam2rule Ontologylinkage Functions for manipulating
2895 ** Ensembl Ontology Linkage objects
2896 ** @nam3rule OntologylinkageType Functions for manipulating
2897 ** Ensembl Ontology Linkage Type enumerations
2898 **
2899 ******************************************************************************/
2900 
2901 
2902 
2903 
2904 /* @section Misc **************************************************************
2905 **
2906 ** Functions for returning an Ensembl Ontology Linkage Type enumeration.
2907 **
2908 ** @fdata [EnsEOntologylinkageType]
2909 **
2910 ** @nam4rule From Ensembl Ontology Linkage Type query
2911 ** @nam5rule Str  AJAX String object query
2912 **
2913 ** @argrule  Str  type  [const AjPStr] Ensembl Ontology Linkage Type string
2914 **
2915 ** @valrule * [EnsEOntologylinkageType] Ensembl Ontology Linkage Type
2916 ** enumeration or ensEOntologylinkageNULL
2917 **
2918 ** @fcategory misc
2919 ******************************************************************************/
2920 
2921 
2922 
2923 
2924 /* @func ensOntologylinkageTypeFromStr ****************************************
2925 **
2926 ** Convert an AJAX String into an Ensembl Ontology Linkage Type enumeration.
2927 **
2928 ** @param [r] type [const AjPStr] Ensembl Ontology Linkage Type string
2929 **
2930 ** @return [EnsEOntologylinkageType] Ensembl Ontology Linkage Type
2931 ** enumeration or ensEOntologylinkageNULL
2932 **
2933 ** @release 6.4.0
2934 ** @@
2935 ******************************************************************************/
2936 
ensOntologylinkageTypeFromStr(const AjPStr type)2937 EnsEOntologylinkageType ensOntologylinkageTypeFromStr(const AjPStr type)
2938 {
2939     register EnsEOntologylinkageType i = ensEOntologylinkageTypeNULL;
2940 
2941     EnsEOntologylinkageType olt = ensEOntologylinkageTypeNULL;
2942 
2943     for (i = ensEOntologylinkageTypeNULL;
2944          ontologylinkageType[i];
2945          i++)
2946         if (ajStrMatchC(type, ontologylinkageType[i]))
2947             olt = i;
2948 
2949     if (!olt)
2950         ajDebug("ensOntologylinkageTypeFromStr encountered "
2951                 "unexpected string '%S'.\n", type);
2952 
2953     return olt;
2954 }
2955 
2956 
2957 
2958 
2959 /* @section Cast **************************************************************
2960 **
2961 ** Functions for returning attributes of an
2962 ** Ensembl Ontology Linkage Type enumeration.
2963 **
2964 ** @fdata [EnsEOntologylinkageType]
2965 **
2966 ** @nam4rule To   Return Ensembl Ontology Linkage Type enumeration
2967 ** @nam5rule Char Return C character string value
2968 **
2969 ** @argrule To olt [EnsEOntologylinkageType]
2970 ** Ensembl Ontology Linkage Type enumeration
2971 **
2972 ** @valrule Char [const char*] Ensembl Ontology Linkage Type C-type (char *)
2973 ** string
2974 **
2975 ** @fcategory cast
2976 ******************************************************************************/
2977 
2978 
2979 
2980 
2981 /* @func ensOntologylinkageTypeToChar *****************************************
2982 **
2983 ** Convert an Ensembl Ontology Linkage Type enumeration into a
2984 ** C-type (char *) string.
2985 **
2986 ** @param [u] olt [EnsEOntologylinkageType] Ensembl Ontology Linkage Type
2987 ** enumeration
2988 **
2989 ** @return [const char*] Ensembl Ontology Linkage Type C-type (char *) string
2990 **
2991 ** @release 6.4.0
2992 ** @@
2993 ******************************************************************************/
2994 
ensOntologylinkageTypeToChar(EnsEOntologylinkageType olt)2995 const char* ensOntologylinkageTypeToChar(EnsEOntologylinkageType olt)
2996 {
2997     register EnsEOntologylinkageType i = ensEOntologylinkageTypeNULL;
2998 
2999     for (i = ensEOntologylinkageTypeNULL;
3000          ontologylinkageType[i] && (i < olt);
3001          i++);
3002 
3003     if (!ontologylinkageType[i])
3004         ajDebug("ensOntologylinkageTypeToChar "
3005                 "encountered an out of boundary error on "
3006                 "Ensembl Ontology Linkage Type "
3007                 "enumeration %d.\n",
3008                 olt);
3009 
3010     return ontologylinkageType[i];
3011 }
3012 
3013 
3014 
3015 
3016 /* @datasection [EnsPDatabaseentry] Ensembl Database Entry ********************
3017 **
3018 ** @nam2rule Databaseentry Functions for manipulating
3019 ** Ensembl Database Entry objects
3020 **
3021 ** @cc Bio::EnsEMBL::DBEntry
3022 ** @cc CVS Revision: 1.53
3023 ** @cc CVS Tag: branch-ensembl-68
3024 **
3025 ******************************************************************************/
3026 
3027 
3028 
3029 
3030 /* @section constructors ******************************************************
3031 **
3032 ** All constructors return a new Ensembl Database Entry by pointer.
3033 ** It is the responsibility of the user to first destroy any previous
3034 ** Database Entry. The target pointer does not need to be initialised to
3035 ** NULL, but it is good programming practice to do so anyway.
3036 **
3037 ** @fdata [EnsPDatabaseentry]
3038 **
3039 ** @nam3rule New Constructor
3040 ** @nam4rule Cpy Constructor with existing object
3041 ** @nam4rule Ini Constructor with initial values
3042 ** @nam4rule Ref Constructor by incrementing the reference counter
3043 **
3044 ** @argrule Cpy dbe [const EnsPDatabaseentry] Ensembl Database Entry
3045 ** @argrule Ini dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
3046 ** @argrule Ini identifier [ajuint] SQL database-internal identifier
3047 ** @argrule Ini analysis [EnsPAnalysis] Ensembl Analysis
3048 ** @argrule Ini edb [EnsPExternaldatabase] Ensembl External Database
3049 ** @argrule Ini primaryid [AjPStr] Primary identifier
3050 ** @argrule Ini displayid [AjPStr] Display identifier
3051 ** @argrule Ini version [AjPStr] Version
3052 ** @argrule Ini description [AjPStr] Description
3053 ** @argrule Ini linkageannotation [AjPStr] Linkage annotation
3054 ** @argrule Ini infotext [AjPStr] Information text
3055 ** @argrule Ini erit [EnsEExternalreferenceInfotype]
3056 ** Ensembl External Reference Information Type enumeration
3057 ** @argrule Ini erot [EnsEExternalreferenceObjecttype]
3058 ** Ensembl External Reference Object Type enumeration
3059 ** @argrule Ini objectid [ajuint] Ensembl Object identifier
3060 ** @argrule Ref dbe [EnsPDatabaseentry] Ensembl Database Entry
3061 **
3062 ** @valrule * [EnsPDatabaseentry] Ensembl Database Entry or NULL
3063 **
3064 ** @fcategory new
3065 ******************************************************************************/
3066 
3067 
3068 
3069 
3070 /* @func ensDatabaseentryNewCpy ***********************************************
3071 **
3072 ** Object-based constructor function, which returns an independent object.
3073 **
3074 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3075 **
3076 ** @return [EnsPDatabaseentry] Ensembl Database Entry or NULL
3077 **
3078 ** @release 6.4.0
3079 ** @@
3080 ******************************************************************************/
3081 
ensDatabaseentryNewCpy(const EnsPDatabaseentry dbe)3082 EnsPDatabaseentry ensDatabaseentryNewCpy(const EnsPDatabaseentry dbe)
3083 {
3084     AjIList iter = NULL;
3085 
3086     AjPStr synonym = NULL;
3087 
3088     EnsPDatabaseentry pthis = NULL;
3089 
3090     EnsPOntologylinkage ol = NULL;
3091 
3092     if (!dbe)
3093         return NULL;
3094 
3095     AJNEW0(pthis);
3096 
3097     pthis->Use = 1U;
3098 
3099     pthis->Identifier = dbe->Identifier;
3100 
3101     pthis->Adaptor = dbe->Adaptor;
3102 
3103     pthis->Externalreference = ensExternalreferenceNewCpy(
3104         dbe->Externalreference);
3105 
3106     pthis->Identityreference = ensIdentityreferenceNewCpy(
3107         dbe->Identityreference);
3108 
3109     /* Copy the AJAX List of (synonym) AJAX String objects. */
3110 
3111     pthis->Synonyms = ajListstrNew();
3112 
3113     iter = ajListIterNew(dbe->Synonyms);
3114 
3115     while (!ajListIterDone(iter))
3116     {
3117         synonym = ajListstrIterGet(iter);
3118 
3119         ajListstrPushAppend(pthis->Synonyms, ajStrNewRef(synonym));
3120     }
3121 
3122     ajListIterDel(&iter);
3123 
3124     /* Copy the AJAX List of Ensembl Ontology Linkage objects. */
3125 
3126     pthis->Ontologylinkages = ajListNew();
3127 
3128     iter = ajListIterNew(dbe->Ontologylinkages);
3129 
3130     while (!ajListIterDone(iter))
3131     {
3132         ol = (EnsPOntologylinkage) ajListIterGet(iter);
3133 
3134         ajListPushAppend(pthis->Ontologylinkages,
3135                          (void *) ensOntologylinkageNewRef(ol));
3136     }
3137 
3138     ajListIterDel(&iter);
3139 
3140     return pthis;
3141 }
3142 
3143 
3144 
3145 
3146 /* @func ensDatabaseentryNewIni ***********************************************
3147 **
3148 ** Constructor for an Ensembl Database Entry with initial values.
3149 **
3150 ** @cc Bio::EnsEMBL::Storable::new
3151 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
3152 ** @param [r] identifier [ajuint] SQL database-internal identifier
3153 ** @cc Bio::EnsEMBL::DBEntry::new
3154 ** @param [u] analysis [EnsPAnalysis] Ensembl Analysis
3155 ** @param [u] edb [EnsPExternaldatabase] Ensembl External Database
3156 ** @param [u] primaryid [AjPStr] Primary identifier
3157 ** @param [u] displayid [AjPStr] Display identifier
3158 ** @param [u] version [AjPStr] Version
3159 ** @param [u] description [AjPStr] Description
3160 ** @param [u] linkageannotation [AjPStr] Linkage annotation
3161 ** @param [u] infotext [AjPStr] Information text
3162 ** @param [u] erit [EnsEExternalreferenceInfotype]
3163 ** Ensembl External Reference Information Type enumeration
3164 ** @param [u] erot [EnsEExternalreferenceObjecttype]
3165 ** Ensembl External Reference Object Type enumeration
3166 ** @param [r] objectid [ajuint] Ensembl Object identifier
3167 **
3168 ** @return [EnsPDatabaseentry] Ensembl Database Entry or NULL
3169 **
3170 ** @release 6.4.0
3171 ** @@
3172 ******************************************************************************/
3173 
ensDatabaseentryNewIni(EnsPDatabaseentryadaptor dbea,ajuint identifier,EnsPAnalysis analysis,EnsPExternaldatabase edb,AjPStr primaryid,AjPStr displayid,AjPStr version,AjPStr description,AjPStr linkageannotation,AjPStr infotext,EnsEExternalreferenceInfotype erit,EnsEExternalreferenceObjecttype erot,ajuint objectid)3174 EnsPDatabaseentry ensDatabaseentryNewIni(
3175     EnsPDatabaseentryadaptor dbea,
3176     ajuint identifier,
3177     EnsPAnalysis analysis,
3178     EnsPExternaldatabase edb,
3179     AjPStr primaryid,
3180     AjPStr displayid,
3181     AjPStr version,
3182     AjPStr description,
3183     AjPStr linkageannotation,
3184     AjPStr infotext,
3185     EnsEExternalreferenceInfotype erit,
3186     EnsEExternalreferenceObjecttype erot,
3187     ajuint objectid)
3188 {
3189     EnsPDatabaseentry dbe = NULL;
3190 
3191     EnsPExternalreference er = NULL;
3192 
3193     if (ajDebugTest("ensDatabaseentryNewIni"))
3194     {
3195         ajDebug("ensDatabaseentryNewIni\n"
3196                 "  dbea %p\n"
3197                 "  identifier %u\n"
3198                 "  analysis %p\n"
3199                 "  edb %p\n"
3200                 "  primaryid '%S'\n"
3201                 "  displayid '%S'\n"
3202                 "  version '%S'\n"
3203                 "  description '%S'\n"
3204                 "  linkageannotation '%S'\n"
3205                 "  infotext '%S'\n"
3206                 "  erit %d\n"
3207                 "  erot %d\n"
3208                 "  objectid %u\n",
3209                 dbea,
3210                 identifier,
3211                 analysis,
3212                 edb,
3213                 primaryid,
3214                 displayid,
3215                 version,
3216                 description,
3217                 linkageannotation,
3218                 infotext,
3219                 erit,
3220                 erot,
3221                 objectid);
3222 
3223         ensAnalysisTrace(analysis, 1);
3224 
3225         ensExternaldatabaseTrace(edb, 1);
3226     }
3227 
3228     if (!edb)
3229         return NULL;
3230 
3231     er = ensExternalreferenceNewIni(identifier,
3232                                     analysis,
3233                                     edb,
3234                                     primaryid,
3235                                     displayid,
3236                                     version,
3237                                     description,
3238                                     linkageannotation,
3239                                     infotext,
3240                                     erit,
3241                                     erot,
3242                                     objectid);
3243 
3244     if (er)
3245     {
3246         AJNEW0(dbe);
3247 
3248         dbe->Use               = 1U;
3249         dbe->Identifier        = identifier;
3250         dbe->Adaptor           = dbea;
3251         dbe->Externalreference = er;
3252         dbe->Identityreference = NULL;
3253         dbe->Synonyms          = ajListstrNew();
3254         dbe->Ontologylinkages  = ajListNew();
3255     }
3256     else
3257         ajDebug("ensDatabaseentryNewIni could not create an "
3258                 "External Reference.\n");
3259 
3260     return dbe;
3261 }
3262 
3263 
3264 
3265 
3266 /* @func ensDatabaseentryNewRef ***********************************************
3267 **
3268 ** Ensembl Object referencing function, which returns a pointer to the
3269 ** Ensembl Object passed in and increases its reference count.
3270 **
3271 ** @param [u] dbe [EnsPDatabaseentry] Ensembl Database Entry
3272 **
3273 ** @return [EnsPDatabaseentry] Ensembl Database Entry or NULL
3274 **
3275 ** @release 6.2.0
3276 ** @@
3277 ******************************************************************************/
3278 
ensDatabaseentryNewRef(EnsPDatabaseentry dbe)3279 EnsPDatabaseentry ensDatabaseentryNewRef(EnsPDatabaseentry dbe)
3280 {
3281     if (!dbe)
3282         return NULL;
3283 
3284     dbe->Use++;
3285 
3286     return dbe;
3287 }
3288 
3289 
3290 
3291 
3292 /* @section destructors *******************************************************
3293 **
3294 ** Destruction destroys all internal data structures and frees the memory
3295 ** allocated for an Ensembl Database Entry object.
3296 **
3297 ** @fdata [EnsPDatabaseentry]
3298 **
3299 ** @nam3rule Del Destroy (free) an Ensembl Database Entry
3300 **
3301 ** @argrule * Pdbe [EnsPDatabaseentry*] Ensembl Database Entry address
3302 **
3303 ** @valrule * [void]
3304 **
3305 ** @fcategory delete
3306 ******************************************************************************/
3307 
3308 
3309 
3310 
3311 /* @func ensDatabaseentryDel **************************************************
3312 **
3313 ** Default destructor for an Ensembl Database Entry.
3314 **
3315 ** @param [d] Pdbe [EnsPDatabaseentry*] Ensembl Database Entry address
3316 **
3317 ** @return [void]
3318 **
3319 ** @release 6.2.0
3320 ** @@
3321 ******************************************************************************/
3322 
ensDatabaseentryDel(EnsPDatabaseentry * Pdbe)3323 void ensDatabaseentryDel(EnsPDatabaseentry *Pdbe)
3324 {
3325     EnsPOntologylinkage ol = NULL;
3326 
3327     EnsPDatabaseentry pthis = NULL;
3328 
3329     if (!Pdbe)
3330         return;
3331 
3332 #if defined(AJ_DEBUG) && AJ_DEBUG >= 1
3333     if (ajDebugTest("ensDatabaseentryDel"))
3334     {
3335         ajDebug("ensDatabaseentryDel\n"
3336                 "  *Pdbe %p\n",
3337                 *Pdbe);
3338 
3339         ensDatabaseentryTrace(*Pdbe, 1);
3340     }
3341 #endif /* defined(AJ_DEBUG) && AJ_DEBUG >= 1 */
3342 
3343     if (!(pthis = *Pdbe) || --pthis->Use)
3344     {
3345         *Pdbe = NULL;
3346 
3347         return;
3348     }
3349 
3350     ensExternalreferenceDel(&pthis->Externalreference);
3351 
3352     ensIdentityreferenceDel(&pthis->Identityreference);
3353 
3354     ajListstrFreeData(&pthis->Synonyms);
3355 
3356     while (ajListPop(pthis->Ontologylinkages, (void **) &ol))
3357         ensOntologylinkageDel(&ol);
3358 
3359     ajListFree(&pthis->Ontologylinkages);
3360 
3361     ajMemFree((void **) Pdbe);
3362 
3363     return;
3364 }
3365 
3366 
3367 
3368 
3369 /* @section member retrieval **************************************************
3370 **
3371 ** Functions for returning members of an Ensembl Database Entry object.
3372 **
3373 ** @fdata [EnsPDatabaseentry]
3374 **
3375 ** @nam3rule Get Return Database Entry attribute(s)
3376 ** @nam4rule Adaptor Return the Ensembl Database Entry Adaptor
3377 ** @nam4rule Ontologylinkages Return the Ensembl Ontology Linkage objects
3378 ** @nam4rule Identifier Return the SQL database-internal identifier
3379 ** @nam4rule Synonyms Return synonyms
3380 **
3381 ** @argrule * dbe [const EnsPDatabaseentry] Ensembl Database Entry
3382 **
3383 ** @valrule Adaptor [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
3384 ** @valrule Ontologylinkages [const AjPList] AJAX List of Ensembl
3385 ** Ontology Linkage objects
3386 ** @valrule Identifier [ajuint] SQL database-internal identifier
3387 ** @valrule Synonyms [AjPList] AJAX List of AJAX String (synonym) objecs
3388 **
3389 ** @fcategory use
3390 ******************************************************************************/
3391 
3392 
3393 
3394 
3395 /* @func ensDatabaseentryGetAdaptor *******************************************
3396 **
3397 ** Get the Ensembl Database Entry Adaptor member of an
3398 ** Ensembl Database Entry.
3399 **
3400 ** @cc Bio::EnsEMBL::Storable::adaptor
3401 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3402 **
3403 ** @return [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
3404 **
3405 ** @release 6.2.0
3406 ** @@
3407 ******************************************************************************/
3408 
ensDatabaseentryGetAdaptor(const EnsPDatabaseentry dbe)3409 EnsPDatabaseentryadaptor ensDatabaseentryGetAdaptor(
3410     const EnsPDatabaseentry dbe)
3411 {
3412     return (dbe) ? dbe->Adaptor : NULL;
3413 }
3414 
3415 
3416 
3417 
3418 /* @func ensDatabaseentryGetIdentifier ****************************************
3419 **
3420 ** Get the SQL database-internal identifier member of an
3421 ** Ensembl Database Entry.
3422 **
3423 ** @cc Bio::EnsEMBL::Storable::dbID
3424 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3425 **
3426 ** @return [ajuint] SQL database-internal identifier  or 0U
3427 **
3428 ** @release 6.2.0
3429 ** @@
3430 ******************************************************************************/
3431 
ensDatabaseentryGetIdentifier(const EnsPDatabaseentry dbe)3432 ajuint ensDatabaseentryGetIdentifier(
3433     const EnsPDatabaseentry dbe)
3434 {
3435     return (dbe) ? dbe->Identifier : 0U;
3436 }
3437 
3438 
3439 
3440 
3441 /* @func ensDatabaseentryGetOntologylinkages **********************************
3442 **
3443 ** Get Ensembl Ontology Linkage objects of an Ensembl Database Entry.
3444 **
3445 ** @cc Bio::EnsEMBL::OntologyXref::get_all_linkage_info
3446 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3447 **
3448 ** @return [const AjPList] AJAX List of Ensembl Ontology Linkage objects
3449 **
3450 ** @release 6.4.0
3451 ** @@
3452 ******************************************************************************/
3453 
ensDatabaseentryGetOntologylinkages(const EnsPDatabaseentry dbe)3454 const AjPList ensDatabaseentryGetOntologylinkages(
3455     const EnsPDatabaseentry dbe)
3456 {
3457     return (dbe) ? dbe->Ontologylinkages : NULL;
3458 }
3459 
3460 
3461 
3462 
3463 /* @func ensDatabaseentryGetSynonyms ******************************************
3464 **
3465 ** Get the synonyms member of an Ensembl Database Entry.
3466 **
3467 ** @cc Bio::EnsEMBL::DBEntry::get_all_synonyms
3468 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3469 **
3470 ** @return [AjPList] AJAX List of AJAX String (symnonym) objects
3471 **
3472 ** @release 6.2.0
3473 ** @@
3474 ******************************************************************************/
3475 
ensDatabaseentryGetSynonyms(const EnsPDatabaseentry dbe)3476 AjPList ensDatabaseentryGetSynonyms(
3477     const EnsPDatabaseentry dbe)
3478 {
3479     return (dbe) ? dbe->Synonyms : NULL;
3480 }
3481 
3482 
3483 
3484 
3485 /* @section debugging *********************************************************
3486 **
3487 ** Functions for reporting of an Ensembl Database Entry object.
3488 **
3489 ** @fdata [EnsPDatabaseentry]
3490 **
3491 ** @nam3rule Trace Report Ensembl Database Entry members to debug file
3492 **
3493 ** @argrule Trace dbe [const EnsPDatabaseentry] Ensembl Database Entry
3494 ** @argrule Trace level [ajuint] Indentation level
3495 **
3496 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
3497 **
3498 ** @fcategory misc
3499 ******************************************************************************/
3500 
3501 
3502 
3503 
3504 /* @func ensDatabaseentryTrace ************************************************
3505 **
3506 ** Trace an Ensembl Database Entry.
3507 **
3508 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3509 ** @param [r] level [ajuint] Indentation level
3510 **
3511 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
3512 **
3513 ** @release 6.2.0
3514 ** @@
3515 ******************************************************************************/
3516 
ensDatabaseentryTrace(const EnsPDatabaseentry dbe,ajuint level)3517 AjBool ensDatabaseentryTrace(const EnsPDatabaseentry dbe, ajuint level)
3518 {
3519     AjIList iter = NULL;
3520 
3521     AjPStr indent = NULL;
3522     AjPStr synonym = NULL;
3523     AjPStr linkage = NULL;
3524 
3525     if (!dbe)
3526         return ajFalse;
3527 
3528     indent = ajStrNew();
3529 
3530     ajStrAppendCountK(&indent, ' ', level * 2);
3531 
3532     ajDebug("%SensDatabaseentryTrace %p\n"
3533             "%S  Use %u\n"
3534             "%S  Identifier %u\n"
3535             "%S  Adaptor %p\n"
3536             "%S  Externalreference %p\n"
3537             "%S  Identityreference %p\n"
3538             "%S  Synonyms %p\n"
3539             "%S  Ontologylinkages %p\n",
3540             indent, dbe,
3541             indent, dbe->Use,
3542             indent, dbe->Identifier,
3543             indent, dbe->Adaptor,
3544             indent, dbe->Externalreference,
3545             indent, dbe->Identityreference,
3546             indent, dbe->Synonyms,
3547             indent, dbe->Ontologylinkages);
3548 
3549     ensExternalreferenceTrace(dbe->Externalreference, level + 1);
3550 
3551     ensIdentityreferenceTrace(dbe->Identityreference, level + 1);
3552 
3553     /* Trace the AJAX List of (synonym) AJAX String objects. */
3554 
3555     if (dbe->Synonyms)
3556     {
3557         ajDebug("%S    AJAX List %p of (synonym) AJAX String objects:\n",
3558                 indent, dbe->Synonyms);
3559 
3560         iter = ajListIterNewread(dbe->Synonyms);
3561 
3562         while (!ajListIterDone(iter))
3563         {
3564             synonym = ajListstrIterGet(iter);
3565 
3566             ajDebug("%S        '%S'\n", indent, synonym);
3567         }
3568 
3569         ajListIterDel(&iter);
3570     }
3571 
3572     /* Trace the AJAX List of (Ontology Linkage Type) AJAX String objects. */
3573 
3574     if (dbe->Ontologylinkages)
3575     {
3576         ajDebug("%S    AJAX List %p of (Ontology Linkage Type) "
3577                 "AJAX String objects:\n",
3578                 indent, dbe->Ontologylinkages);
3579 
3580         iter = ajListIterNewread(dbe->Ontologylinkages);
3581 
3582         while (!ajListIterDone(iter))
3583         {
3584             linkage = (AjPStr) ajListIterGet(iter);
3585 
3586             ajDebug("%S        '%S'\n", indent, linkage);
3587         }
3588 
3589         ajListIterDel(&iter);
3590     }
3591 
3592     ajStrDel(&indent);
3593 
3594     return ajTrue;
3595 }
3596 
3597 
3598 
3599 
3600 /* @section calculate *********************************************************
3601 **
3602 ** Functions for calculating information from an Ensembl Database Entry object.
3603 **
3604 ** @fdata [EnsPDatabaseentry]
3605 **
3606 ** @nam3rule Calculate Calculate Ensembl Database Entry information
3607 ** @nam4rule Memsize Calculate the memory size in bytes
3608 **
3609 ** @argrule * dbe [const EnsPDatabaseentry] Ensembl Database Entry
3610 **
3611 ** @valrule Memsize [size_t] Memory size in bytes or 0
3612 **
3613 ** @fcategory misc
3614 ******************************************************************************/
3615 
3616 
3617 
3618 
3619 /* @func ensDatabaseentryCalculateMemsize *************************************
3620 **
3621 ** Calculate the memory size in bytes of an Ensembl Database Entry.
3622 **
3623 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3624 **
3625 ** @return [size_t] Memory size in bytes or 0
3626 **
3627 ** @release 6.4.0
3628 ** @@
3629 ******************************************************************************/
3630 
ensDatabaseentryCalculateMemsize(const EnsPDatabaseentry dbe)3631 size_t ensDatabaseentryCalculateMemsize(const EnsPDatabaseentry dbe)
3632 {
3633     size_t size = 0;
3634 
3635     AjIList iter = NULL;
3636 
3637     AjPStr synonym = NULL;
3638     AjPStr linkage = NULL;
3639 
3640     if (!dbe)
3641         return 0;
3642 
3643     size += sizeof (EnsODatabaseentry);
3644 
3645     size += ensExternalreferenceCalculateMemsize(dbe->Externalreference);
3646 
3647     size += ensIdentityreferenceCalculateMemsize(dbe->Identityreference);
3648 
3649     /* Summarise the AJAX List of (synonym) AJAX String objects. */
3650 
3651     if (dbe->Synonyms)
3652     {
3653         size += sizeof (AjOList);
3654 
3655         iter = ajListIterNew(dbe->Synonyms);
3656 
3657         while (!ajListIterDone(iter))
3658         {
3659             synonym = ajListstrIterGet(iter);
3660 
3661             if (synonym)
3662             {
3663                 size += sizeof (AjOStr);
3664 
3665                 size += ajStrGetRes(synonym);
3666             }
3667         }
3668 
3669         ajListIterDel(&iter);
3670     }
3671 
3672     /*
3673     ** Summarise the AJAX List of (Ontology Linkage Type)
3674     ** AJAX String objects.
3675     */
3676 
3677     if (dbe->Ontologylinkages)
3678     {
3679         size += sizeof (AjOList);
3680 
3681         iter = ajListIterNew(dbe->Ontologylinkages);
3682 
3683         while (!ajListIterDone(iter))
3684         {
3685             linkage = (AjPStr) ajListIterGet(iter);
3686 
3687             if (linkage)
3688             {
3689                 size += sizeof (AjOStr);
3690 
3691                 size += ajStrGetRes(linkage);
3692             }
3693         }
3694 
3695         ajListIterDel(&iter);
3696     }
3697 
3698     return size;
3699 }
3700 
3701 
3702 
3703 
3704 /* @section convenience functions *********************************************
3705 **
3706 ** Ensembl Database Entry convenience functions
3707 **
3708 ** @fdata [EnsPDatabaseentry]
3709 **
3710 ** @nam3rule Get Get member(s) of associated objects
3711 ** @nam4rule Db Return External Database members
3712 ** @nam5rule Displayname Return the database display name
3713 ** @nam5rule Name Return the database name
3714 ** @nam5rule Release Return the database release
3715 ** @nam4rule Description Return the description
3716 ** @nam4rule Displayidentifier Return the display identifier
3717 ** @nam4rule Infotext Return the information text
3718 ** @nam4rule Infotype Return the
3719 ** Ensembl External Refernece Information Type enumeration
3720 ** @nam4rule Linkageannotation Return the linkage annotation
3721 ** @nam4rule Objectidentifier Return the Ensembl Object identifier
3722 ** @nam4rule Objecttype Return the
3723 ** Ensembl External Database Object Type enumeration
3724 ** @nam4rule Primaryidentifier Return the primary identifier
3725 ** @nam4rule Priority Return the priority
3726 ** @nam4rule Status Return the status
3727 ** @nam4rule Type Return the type
3728 ** @nam4rule Version Return the version
3729 **
3730 ** @argrule * dbe [const EnsPDatabaseentry] Ensembl Database Entry
3731 **
3732 ** @valrule DbDisplayname [AjPStr] Database display name or NULL
3733 ** @valrule DbName [AjPStr] Database name or NULL
3734 ** @valrule DbRelease [AjPStr] Database release or NULL
3735 ** @valrule Description [AjPStr] Description or NULL
3736 ** @valrule Displayidentifier [AjPStr] Display identifier or NULL
3737 ** @valrule Infotext [AjPStr] Information text or NULL
3738 ** @valrule Infotype [EnsEExternalreferenceInfotype]
3739 ** Ensembl External Reference Information Type enumeration or
3740 ** ensEExternalreferenceInfotypeNULL
3741 ** @valrule Linkageannotation [AjPStr] Linkage annotation or NULL
3742 ** @valrule Objectidentifier [ajuint] Ensembl Object identifier or 0U
3743 ** @valrule Objecttype [EnsEExternalreferenceObjecttype]
3744 ** Ensembl External Reference Object Type enumeration or
3745 ** ensEExternalreferenceObjecttypeNULL
3746 ** @valrule Primaryidentifier [AjPStr] Primary identifier or NULL
3747 ** @valrule Priority [ajint] Priority
3748 ** @valrule Status [EnsEExternaldatabaseStatus] Status or
3749 ** ensEExternaldatabaseStatusNULL
3750 ** @valrule Type [EnsEExternaldatabaseType] Type or
3751 ** ensEExternaldatabaseTypeNULL
3752 ** @valrule Version [AjPStr] Version or NULL
3753 **
3754 ** @fcategory use
3755 ******************************************************************************/
3756 
3757 
3758 
3759 
3760 /* @func ensDatabaseentryGetDbDisplayname *************************************
3761 **
3762 ** Get the database display name member of an Ensembl Database Entry.
3763 **
3764 ** @cc Bio::EnsEMBL::DBEntry::db_display_name
3765 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3766 **
3767 ** @return [AjPStr] Database display name or NULL
3768 **
3769 ** @release 6.4.0
3770 ** @@
3771 ******************************************************************************/
3772 
ensDatabaseentryGetDbDisplayname(const EnsPDatabaseentry dbe)3773 AjPStr ensDatabaseentryGetDbDisplayname(const EnsPDatabaseentry dbe)
3774 {
3775     return (dbe &&
3776             dbe->Externalreference &&
3777             dbe->Externalreference->Externaldatabase &&
3778             dbe->Externalreference->Externaldatabase->Displayname) ?
3779         dbe->Externalreference->Externaldatabase->Displayname : NULL;
3780 }
3781 
3782 
3783 
3784 
3785 /* @func ensDatabaseentryGetDbName ********************************************
3786 **
3787 ** Get the database name member of an Ensembl Database Entry.
3788 **
3789 ** @cc Bio::EnsEMBL::DBEntry::dbname
3790 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3791 **
3792 ** @return [AjPStr] Database name or NULL
3793 **
3794 ** @release 6.2.0
3795 ** @@
3796 ******************************************************************************/
3797 
ensDatabaseentryGetDbName(const EnsPDatabaseentry dbe)3798 AjPStr ensDatabaseentryGetDbName(const EnsPDatabaseentry dbe)
3799 {
3800     return (dbe &&
3801             dbe->Externalreference &&
3802             dbe->Externalreference->Externaldatabase &&
3803             dbe->Externalreference->Externaldatabase->Name) ?
3804         dbe->Externalreference->Externaldatabase->Name : NULL;
3805 }
3806 
3807 
3808 
3809 
3810 /* @func ensDatabaseentryGetDbRelease *****************************************
3811 **
3812 ** Get the database release member of an Ensembl Database Entry.
3813 **
3814 ** @cc Bio::EnsEMBL::DBEntry::release
3815 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3816 **
3817 ** @return [AjPStr] Database release or NULL
3818 **
3819 ** @release 6.2.0
3820 ** @@
3821 ******************************************************************************/
3822 
ensDatabaseentryGetDbRelease(const EnsPDatabaseentry dbe)3823 AjPStr ensDatabaseentryGetDbRelease(const EnsPDatabaseentry dbe)
3824 {
3825     return (dbe &&
3826             dbe->Externalreference &&
3827             dbe->Externalreference->Externaldatabase &&
3828             dbe->Externalreference->Externaldatabase->Release) ?
3829         dbe->Externalreference->Externaldatabase->Release : NULL;
3830 }
3831 
3832 
3833 
3834 
3835 /* @func ensDatabaseentryGetDescription ***************************************
3836 **
3837 ** Get the description member of an Ensembl Database Entry.
3838 **
3839 ** @cc Bio::EnsEMBL::DBEntry::description
3840 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3841 **
3842 ** @return [AjPStr] Description or NULL
3843 **
3844 ** @release 6.2.0
3845 ** @@
3846 ******************************************************************************/
3847 
ensDatabaseentryGetDescription(const EnsPDatabaseentry dbe)3848 AjPStr ensDatabaseentryGetDescription(const EnsPDatabaseentry dbe)
3849 {
3850     return (dbe &&
3851             dbe->Externalreference &&
3852             dbe->Externalreference->Description) ?
3853         dbe->Externalreference->Description : NULL;
3854 }
3855 
3856 
3857 
3858 
3859 /* @func ensDatabaseentryGetDisplayidentifier *********************************
3860 **
3861 ** Get the display identifier member of an Ensembl Database Entry.
3862 **
3863 ** @cc Bio::EnsEMBL::DBEntry::display_id
3864 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3865 **
3866 ** @return [AjPStr] Display identifier or NULL
3867 **
3868 ** @release 6.4.0
3869 ** @@
3870 ******************************************************************************/
3871 
ensDatabaseentryGetDisplayidentifier(const EnsPDatabaseentry dbe)3872 AjPStr ensDatabaseentryGetDisplayidentifier(const EnsPDatabaseentry dbe)
3873 {
3874     return (dbe &&
3875             dbe->Externalreference &&
3876             dbe->Externalreference->Displayidentifier) ?
3877         dbe->Externalreference->Displayidentifier : NULL;
3878 }
3879 
3880 
3881 
3882 
3883 /* @func ensDatabaseentryGetInfotext ******************************************
3884 **
3885 ** Get the information text member of an Ensembl Database Entry.
3886 **
3887 ** @cc Bio::EnsEMBL::DBEntry::info_text
3888 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3889 **
3890 ** @return [AjPStr] Information text or NULL
3891 **
3892 ** @release 6.4.0
3893 ** @@
3894 ******************************************************************************/
3895 
ensDatabaseentryGetInfotext(const EnsPDatabaseentry dbe)3896 AjPStr ensDatabaseentryGetInfotext(const EnsPDatabaseentry dbe)
3897 {
3898     return (dbe &&
3899             dbe->Externalreference &&
3900             dbe->Externalreference->Infotext) ?
3901         dbe->Externalreference->Infotext : NULL;
3902 }
3903 
3904 
3905 
3906 
3907 /* @func ensDatabaseentryGetInfotype ******************************************
3908 **
3909 ** Get the Ensembl External Refernce Information Type enumeration member of an
3910 ** Ensembl Database Entry.
3911 **
3912 ** @cc Bio::EnsEMBL::DBEntry::info_type
3913 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3914 **
3915 ** @return [EnsEExternalreferenceInfotype]
3916 ** Ensembl External Reference Information Type enumeration or
3917 ** ensEExternalreferenceInfotypeNULL
3918 **
3919 ** @release 6.4.0
3920 ** @@
3921 ******************************************************************************/
3922 
ensDatabaseentryGetInfotype(const EnsPDatabaseentry dbe)3923 EnsEExternalreferenceInfotype ensDatabaseentryGetInfotype(
3924     const EnsPDatabaseentry dbe)
3925 {
3926     return (dbe &&
3927             dbe->Externalreference &&
3928             dbe->Externalreference->Infotype) ?
3929         dbe->Externalreference->Infotype : ensEExternalreferenceInfotypeNULL;
3930 }
3931 
3932 
3933 
3934 
3935 /* @func ensDatabaseentryGetLinkageannotation *********************************
3936 **
3937 ** Get the linkage annotation member of an Ensembl Database Entry.
3938 **
3939 ** @cc Bio::EnsEMBL::DBEntry::linkage_annotation
3940 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3941 **
3942 ** @return [AjPStr] Linkage annotation or NULL
3943 **
3944 ** @release 6.4.0
3945 ** @@
3946 ******************************************************************************/
3947 
ensDatabaseentryGetLinkageannotation(const EnsPDatabaseentry dbe)3948 AjPStr ensDatabaseentryGetLinkageannotation(const EnsPDatabaseentry dbe)
3949 {
3950     return (dbe &&
3951             dbe->Externalreference &&
3952             dbe->Externalreference->Linkageannotation) ?
3953         dbe->Externalreference->Linkageannotation : NULL;
3954 }
3955 
3956 
3957 
3958 
3959 /* @func ensDatabaseentryGetObjectidentifier **********************************
3960 **
3961 ** Get the Ensembl Object identifier member of an
3962 ** Ensembl Database Entry.
3963 **
3964 ** @cc Bio::EnsEMBL::DBEntry::ensembl_id
3965 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3966 **
3967 ** @return [ajuint] Ensembl Object identifier or 0U
3968 **
3969 ** @release 6.4.0
3970 ** @@
3971 ******************************************************************************/
3972 
ensDatabaseentryGetObjectidentifier(const EnsPDatabaseentry dbe)3973 ajuint ensDatabaseentryGetObjectidentifier(
3974     const EnsPDatabaseentry dbe)
3975 {
3976     return (dbe &&
3977             dbe->Externalreference &&
3978             dbe->Externalreference->Objectidentifier) ?
3979         dbe->Externalreference->Objectidentifier : 0U;
3980 }
3981 
3982 
3983 
3984 
3985 /* @func ensDatabaseentryGetObjecttype ****************************************
3986 **
3987 ** Get the Ensembl External Refernce Object Type enumeration member of an
3988 ** Ensembl Database Entry.
3989 **
3990 ** @cc Bio::EnsEMBL::DBEntry::ensembl_object_type
3991 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
3992 **
3993 ** @return [EnsEExternalreferenceObjecttype]
3994 ** Ensembl External Reference Object Type enumeration or
3995 ** ensEExternalreferenceObjecttypeNULL
3996 **
3997 ** @release 6.4.0
3998 ** @@
3999 ******************************************************************************/
4000 
ensDatabaseentryGetObjecttype(const EnsPDatabaseentry dbe)4001 EnsEExternalreferenceObjecttype ensDatabaseentryGetObjecttype(
4002     const EnsPDatabaseentry dbe)
4003 {
4004     return (dbe &&
4005             dbe->Externalreference &&
4006             dbe->Externalreference->Objecttype) ?
4007         dbe->Externalreference->Objecttype : ensEExternalreferenceObjecttypeNULL;
4008 }
4009 
4010 
4011 
4012 
4013 /* @func ensDatabaseentryGetPrimaryidentifier *********************************
4014 **
4015 ** Get the primary identifier member of an Ensembl Database Entry.
4016 **
4017 ** @cc Bio::EnsEMBL::DBEntry::primary_id
4018 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
4019 **
4020 ** @return [AjPStr] Primary identifier or NULL
4021 **
4022 ** @release 6.4.0
4023 ** @@
4024 ******************************************************************************/
4025 
ensDatabaseentryGetPrimaryidentifier(const EnsPDatabaseentry dbe)4026 AjPStr ensDatabaseentryGetPrimaryidentifier(const EnsPDatabaseentry dbe)
4027 {
4028     return (dbe &&
4029             dbe->Externalreference &&
4030             dbe->Externalreference->Primaryidentifier) ?
4031         dbe->Externalreference->Primaryidentifier : NULL;
4032 }
4033 
4034 
4035 
4036 
4037 /* @func ensDatabaseentryGetPriority ******************************************
4038 **
4039 ** Get the priority member of an Ensembl Database Entry.
4040 **
4041 ** @cc Bio::EnsEMBL::DBEntry::priority
4042 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
4043 **
4044 ** @return [ajint] Priortity or 0
4045 **
4046 ** @release 6.2.0
4047 ** @@
4048 ******************************************************************************/
4049 
ensDatabaseentryGetPriority(const EnsPDatabaseentry dbe)4050 ajint ensDatabaseentryGetPriority(const EnsPDatabaseentry dbe)
4051 {
4052     return (dbe &&
4053             dbe->Externalreference &&
4054             dbe->Externalreference->Externaldatabase &&
4055             dbe->Externalreference->Externaldatabase->Priority) ?
4056         dbe->Externalreference->Externaldatabase->Priority : 0;
4057 }
4058 
4059 
4060 
4061 
4062 /* @func ensDatabaseentryGetStatus ********************************************
4063 **
4064 ** Get the status member of an Ensembl Database Entry.
4065 **
4066 ** @cc Bio::EnsEMBL::DBEntry::status
4067 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
4068 **
4069 ** @return [EnsEExternaldatabaseStatus] Status or
4070 **                                      ensEExternaldatabaseStatusNULL
4071 **
4072 ** @release 6.2.0
4073 ** @@
4074 ******************************************************************************/
4075 
ensDatabaseentryGetStatus(const EnsPDatabaseentry dbe)4076 EnsEExternaldatabaseStatus ensDatabaseentryGetStatus(
4077     const EnsPDatabaseentry dbe)
4078 {
4079     return (dbe &&
4080             dbe->Externalreference &&
4081             dbe->Externalreference->Externaldatabase &&
4082             dbe->Externalreference->Externaldatabase->Status) ?
4083         dbe->Externalreference->Externaldatabase->Status :
4084         ensEExternaldatabaseStatusNULL;
4085 }
4086 
4087 
4088 
4089 
4090 /* @func ensDatabaseentryGetType **********************************************
4091 **
4092 ** Get the type member of an Ensembl Database Entry.
4093 **
4094 ** @cc Bio::EnsEMBL::DBEntry::type
4095 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
4096 **
4097 ** @return [EnsEExternaldatabaseType] Type or ensEExternaldatabaseTypeNULL
4098 **
4099 ** @release 6.2.0
4100 ** @@
4101 ******************************************************************************/
4102 
ensDatabaseentryGetType(const EnsPDatabaseentry dbe)4103 EnsEExternaldatabaseType ensDatabaseentryGetType(const EnsPDatabaseentry dbe)
4104 {
4105     return (dbe &&
4106             dbe->Externalreference &&
4107             dbe->Externalreference->Externaldatabase &&
4108             dbe->Externalreference->Externaldatabase->Type) ?
4109         dbe->Externalreference->Externaldatabase->Type :
4110         ensEExternaldatabaseTypeNULL;
4111 }
4112 
4113 
4114 
4115 
4116 /* @func ensDatabaseentryGetVersion *******************************************
4117 **
4118 ** Get the version member of an Ensembl Database Entry.
4119 **
4120 ** @cc Bio::EnsEMBL::DBEntry::version
4121 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
4122 **
4123 ** @return [AjPStr] Version or NULL
4124 **
4125 ** @release 6.2.0
4126 ** @@
4127 ******************************************************************************/
4128 
ensDatabaseentryGetVersion(const EnsPDatabaseentry dbe)4129 AjPStr ensDatabaseentryGetVersion(const EnsPDatabaseentry dbe)
4130 {
4131     return (dbe &&
4132             dbe->Externalreference &&
4133             dbe->Externalreference->Version) ?
4134         dbe->Externalreference->Version : NULL;
4135 }
4136 
4137 
4138 
4139 
4140 /* @section member addition **************************************************
4141 **
4142 ** Functions for adding members to an Ensembl Database Entry object.
4143 **
4144 ** @fdata [EnsPDatabaseentry]
4145 **
4146 ** @nam3rule Add Add one object to an Ensembl Database Entry
4147 ** @nam4rule Ontologylinkage Add an Ensembl Ontology Linkage
4148 **
4149 ** @argrule * dbe [EnsPDatabaseentry] Ensembl Database Entry object
4150 ** @argrule Ontologylinkage linkagetype [AjPStr] Linkage type
4151 ** @argrule Ontologylinkage source [EnsPDatabaseentry] Ensembl Database
4152 ** Entry
4153 **
4154 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
4155 **
4156 ** @fcategory modify
4157 ******************************************************************************/
4158 
4159 
4160 
4161 
4162 /* @func ensDatabaseentryAddOntologylinkage ***********************************
4163 **
4164 ** Add an Ensembl Ontology Linkage to an Ensembl Database Entry.
4165 **
4166 ** @cc Bio::EnsEMBL::OntologyXref::add_linkage_type
4167 ** @param [u] dbe [EnsPDatabaseentry] Ensembl Database Entry
4168 ** @param [u] linkagetype [AjPStr] Linkage type
4169 ** @param [u] source [EnsPDatabaseentry] Source Ensembl Database Entry
4170 **
4171 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
4172 **
4173 ** @release 6.4.0
4174 ** @@
4175 ******************************************************************************/
4176 
ensDatabaseentryAddOntologylinkage(EnsPDatabaseentry dbe,AjPStr linkagetype,EnsPDatabaseentry source)4177 AjBool ensDatabaseentryAddOntologylinkage(EnsPDatabaseentry dbe,
4178                                           AjPStr linkagetype,
4179                                           EnsPDatabaseentry source)
4180 {
4181     EnsPOntologylinkage ol = NULL;
4182 
4183     if (!dbe)
4184         return ajFalse;
4185 
4186     ol = ensOntologylinkageNewIni(linkagetype, source);
4187 
4188     if (ol)
4189     {
4190         ajListPushAppend(dbe->Ontologylinkages, (void *) ol);
4191 
4192         return ajTrue;
4193     }
4194 
4195     return ajFalse;
4196 }
4197 
4198 
4199 
4200 
4201 /* @section clear *************************************************************
4202 **
4203 ** Functions for clearing internals of an Ensembl Database Entry object.
4204 **
4205 ** @fdata [EnsPDatabaseentry]
4206 **
4207 ** @nam3rule Clear Clear Ensembl Database Entry members
4208 ** @nam4rule Ontologylinkages Clear Ensembl Ontology Linkage objects
4209 **
4210 ** @argrule * dbe [EnsPDatabaseentry] Ensembl Database Entry
4211 **
4212 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
4213 **
4214 ** @fcategory misc
4215 ******************************************************************************/
4216 
4217 
4218 
4219 
4220 /* @func ensDatabaseentryClearOntologylinkages ********************************
4221 **
4222 ** Clear all Ensembl Ontology Linkage objects of an Ensembl Database Entry.
4223 **
4224 ** @cc Bio::EnsEMBL::OntologyXref::flush_linkage_types
4225 ** @param [u] dbe [EnsPDatabaseentry] Ensembl Database Entry
4226 **
4227 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
4228 **
4229 ** @release 6.4.0
4230 ** @@
4231 ******************************************************************************/
4232 
ensDatabaseentryClearOntologylinkages(EnsPDatabaseentry dbe)4233 AjBool ensDatabaseentryClearOntologylinkages(EnsPDatabaseentry dbe)
4234 {
4235     EnsPOntologylinkage ol = NULL;
4236 
4237     if (!dbe)
4238         return ajFalse;
4239 
4240     while (ajListPop(dbe->Ontologylinkages, (void **) &ol))
4241         ensOntologylinkageDel(&ol);
4242 
4243     return ajTrue;
4244 }
4245 
4246 
4247 
4248 
4249 /* @section fetch *************************************************************
4250 **
4251 ** Functions for fetching information from an Ensembl Database Entry object.
4252 **
4253 ** @fdata [EnsPDatabaseentry]
4254 **
4255 ** @nam3rule Fetch Fetch Ensembl Database Entry information
4256 ** @nam4rule All Fetch all objects
4257 ** @nam5rule Dependents   Fetch all Ensembl Database Entry objects,
4258 **                        which depend on an Ensembl Database Entry
4259 ** @nam5rule Linkagetypes Fetch all Ontology Linkage types
4260 ** @nam5rule Masters      Fetch all Ensembl Database Entry objects,
4261 **                        which are masters of an Ensembl Database Entry
4262 ** @nam6rule By           Fetch all by a criterion
4263 ** @nam7rule Gene         Fetch all by an Ensembl Gene
4264 ** @nam7rule Transcript   Fetch all by an Ensembl Transcript
4265 ** @nam7rule Translation  Fetch all by an Ensembl Translation
4266 **
4267 ** @argrule AllDependents dbe [EnsPDatabaseentry] Ensembl Database Entry
4268 ** @argrule AllLinkagetypes dbe [const EnsPDatabaseentry]
4269 ** Ensembl Database Entry
4270 ** @argrule AllMasters dbe [EnsPDatabaseentry] Ensembl Database Entry
4271 ** @argrule ByGene gene [const EnsPGene]
4272 ** Ensembl Gene
4273 ** @argrule ByTranscript transcript [const EnsPTranscript]
4274 ** Ensembl Transcript
4275 ** @argrule ByTranslation translation [const EnsPTranslation]
4276 ** Ensembl Translation
4277 ** @argrule AllDependents dbes [AjPList] AJAX List of
4278 ** Ensembl Database Entry objects
4279 ** @argrule AllLinkagetypes types [AjPList] AJAX List of AJAX String objects
4280 **                          (linkage types i.e. Ontology Evidence Codes)
4281 ** @argrule AllMasters dbes [AjPList] AJAX List of
4282 ** Ensembl Database Entry objects
4283 **
4284 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
4285 **
4286 ** @fcategory misc
4287 ******************************************************************************/
4288 
4289 
4290 
4291 
4292 /* @func ensDatabaseentryFetchAllDependents ***********************************
4293 **
4294 ** Fetch all Ensembl Database Entry objects which are dependent on an
4295 ** Ensembl Database Entry.
4296 **
4297 ** @cc Bio::EnsEMBL::DBEntry::get_all_dependents
4298 ** @param [u] dbe [EnsPDatabaseentry] Ensembl Database Entry
4299 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
4300 **
4301 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
4302 **
4303 ** @release 6.4.0
4304 ** @@
4305 ******************************************************************************/
4306 
ensDatabaseentryFetchAllDependents(EnsPDatabaseentry dbe,AjPList dbes)4307 AjBool ensDatabaseentryFetchAllDependents(
4308     EnsPDatabaseentry dbe,
4309     AjPList dbes)
4310 {
4311     if (!dbe)
4312         return ajFalse;
4313 
4314     if (!dbes)
4315         return ajFalse;
4316 
4317     return ensDatabaseentryadaptorFetchAllDependents(
4318         dbe->Adaptor,
4319         dbe,
4320         dbes);
4321 }
4322 
4323 
4324 
4325 
4326 /* @func ensDatabaseentryFetchAllDependentsByGene *****************************
4327 **
4328 ** Fetch all Ensembl Database Entry objects which are dependent on an
4329 ** Ensembl Database Entry and linked to an Ensembl Gene.
4330 **
4331 ** @cc Bio::EnsEMBL::DBEntry::get_all_dependents
4332 ** @param [u] dbe [EnsPDatabaseentry] Ensembl Database Entry
4333 ** @param [r] gene [const EnsPGene] Ensembl Gene
4334 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
4335 **
4336 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
4337 **
4338 ** @release 6.4.0
4339 ** @@
4340 ******************************************************************************/
4341 
ensDatabaseentryFetchAllDependentsByGene(EnsPDatabaseentry dbe,const EnsPGene gene,AjPList dbes)4342 AjBool ensDatabaseentryFetchAllDependentsByGene(
4343     EnsPDatabaseentry dbe,
4344     const EnsPGene gene,
4345     AjPList dbes)
4346 {
4347     if (!dbe)
4348         return ajFalse;
4349 
4350     if (!gene)
4351         return ajFalse;
4352 
4353     if (!dbes)
4354         return ajFalse;
4355 
4356     return ensDatabaseentryadaptorFetchAllDependentsByGene(
4357         dbe->Adaptor,
4358         dbe,
4359         gene,
4360         dbes);
4361 }
4362 
4363 
4364 
4365 
4366 /* @func ensDatabaseentryFetchAllDependentsByTranscript ***********************
4367 **
4368 ** Fetch all Ensembl Database Entry objects which are dependent on an
4369 ** Ensembl Database Entry and linked to an Ensembl Transcript.
4370 **
4371 ** @cc Bio::EnsEMBL::DBEntry::get_all_dependents
4372 ** @param [u] dbe [EnsPDatabaseentry] Ensembl Database Entry
4373 ** @param [r] transcript [const EnsPTranscript] Ensembl Transcript
4374 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
4375 **
4376 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
4377 **
4378 ** @release 6.4.0
4379 ** @@
4380 ******************************************************************************/
4381 
ensDatabaseentryFetchAllDependentsByTranscript(EnsPDatabaseentry dbe,const EnsPTranscript transcript,AjPList dbes)4382 AjBool ensDatabaseentryFetchAllDependentsByTranscript(
4383     EnsPDatabaseentry dbe,
4384     const EnsPTranscript transcript,
4385     AjPList dbes)
4386 {
4387     if (!dbe)
4388         return ajFalse;
4389 
4390     if (!transcript)
4391         return ajFalse;
4392 
4393     if (!dbes)
4394         return ajFalse;
4395 
4396     return ensDatabaseentryadaptorFetchAllDependentsByTranscript(
4397         dbe->Adaptor,
4398         dbe,
4399         transcript,
4400         dbes);
4401 }
4402 
4403 
4404 
4405 
4406 /* @func ensDatabaseentryFetchAllDependentsByTranslation **********************
4407 **
4408 ** Fetch all Ensembl Database Entry objects which are dependent on an
4409 ** Ensembl Database Entry and linked to an Ensembl Translation.
4410 **
4411 ** @cc Bio::EnsEMBL::DBEntry::get_all_dependents
4412 ** @param [u] dbe [EnsPDatabaseentry] Ensembl Database Entry
4413 ** @param [r] translation [const EnsPTranslation] Ensembl Translation
4414 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
4415 **
4416 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
4417 **
4418 ** @release 6.4.0
4419 ** @@
4420 ******************************************************************************/
4421 
ensDatabaseentryFetchAllDependentsByTranslation(EnsPDatabaseentry dbe,const EnsPTranslation translation,AjPList dbes)4422 AjBool ensDatabaseentryFetchAllDependentsByTranslation(
4423     EnsPDatabaseentry dbe,
4424     const EnsPTranslation translation,
4425     AjPList dbes)
4426 {
4427     if (!dbe)
4428         return ajFalse;
4429 
4430     if (!translation)
4431         return ajFalse;
4432 
4433     if (!dbes)
4434         return ajFalse;
4435 
4436     return ensDatabaseentryadaptorFetchAllDependentsByTranslation(
4437         dbe->Adaptor,
4438         dbe,
4439         translation,
4440         dbes);
4441 }
4442 
4443 
4444 
4445 
4446 /* @func ensDatabaseentryFetchAllLinkagetypes *********************************
4447 **
4448 ** Fetch all Ensembl Ontology Linkage objects of an Ensembl Database Entry.
4449 **
4450 ** The caller is responsible for deleting the AJAX String linkage types
4451 ** before deleting the AJAX List.
4452 **
4453 ** @cc Bio::EnsEMBL::OntologyXref::get_all_linkage_types
4454 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
4455 ** @param [u] types [AjPList] AJAX List of AJAX String linkage types
4456 **                           (i.e. Ontology Evidence Codes)
4457 **
4458 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
4459 **
4460 ** @release 6.4.0
4461 ** @@
4462 ******************************************************************************/
4463 
ensDatabaseentryFetchAllLinkagetypes(const EnsPDatabaseentry dbe,AjPList types)4464 AjBool ensDatabaseentryFetchAllLinkagetypes(const EnsPDatabaseentry dbe,
4465                                             AjPList types)
4466 {
4467     AjBool match = AJFALSE;
4468 
4469     AjIList iter1 = NULL;
4470     AjIList iter2 = NULL;
4471 
4472     AjPStr type = NULL;
4473 
4474     EnsPOntologylinkage ol = NULL;
4475 
4476     if (!dbe)
4477         return ajFalse;
4478 
4479     if (!types)
4480         return ajFalse;
4481 
4482     iter1 = ajListIterNew(dbe->Ontologylinkages);
4483 
4484     iter2 = ajListIterNew(types);
4485 
4486     while (!ajListIterDone(iter1))
4487     {
4488         ol = (EnsPOntologylinkage) ajListIterGet(iter1);
4489 
4490         ajListIterRewind(iter2);
4491 
4492         match = ajFalse;
4493 
4494         while (!ajListIterDone(iter2))
4495         {
4496             type = (AjPStr) ajListIterGet(iter2);
4497 
4498             if (ajStrMatchS(ol->LinkageType, type))
4499             {
4500                 match = ajTrue;
4501 
4502                 break;
4503             }
4504         }
4505 
4506         if (!match)
4507             ajListPushAppend(types, (void *) ajStrNewRef(type));
4508     }
4509 
4510     ajListIterDel(&iter1);
4511     ajListIterDel(&iter2);
4512 
4513     return ajTrue;
4514 }
4515 
4516 
4517 
4518 
4519 /* @func ensDatabaseentryFetchAllMasters **************************************
4520 **
4521 ** Fetch all Ensembl Database Entry objects which are masters of an
4522 ** Ensembl Database Entry.
4523 **
4524 ** @cc Bio::EnsEMBL::DBEntry::get_all_masters
4525 ** @param [u] dbe [EnsPDatabaseentry] Ensembl Database Entry
4526 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
4527 **
4528 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
4529 **
4530 ** @release 6.4.0
4531 ** @@
4532 ******************************************************************************/
4533 
ensDatabaseentryFetchAllMasters(EnsPDatabaseentry dbe,AjPList dbes)4534 AjBool ensDatabaseentryFetchAllMasters(
4535     EnsPDatabaseentry dbe,
4536     AjPList dbes)
4537 {
4538     if (!dbe)
4539         return ajFalse;
4540 
4541     if (!dbes)
4542         return ajFalse;
4543 
4544     return ensDatabaseentryadaptorFetchAllMasters(
4545         dbe->Adaptor,
4546         dbe,
4547         dbes);
4548 }
4549 
4550 
4551 
4552 
4553 /* @func ensDatabaseentryFetchAllMastersByGene ********************************
4554 **
4555 ** Fetch all Ensembl Database Entry objects which are masters of an
4556 ** Ensembl Database Entry and linked to an Ensembl Gene.
4557 **
4558 ** @cc Bio::EnsEMBL::DBEntry::get_all_masters
4559 ** @param [u] dbe [EnsPDatabaseentry] Ensembl Database Entry
4560 ** @param [r] gene [const EnsPGene] Ensembl Gene
4561 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
4562 **
4563 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
4564 **
4565 ** @release 6.4.0
4566 ** @@
4567 ******************************************************************************/
4568 
ensDatabaseentryFetchAllMastersByGene(EnsPDatabaseentry dbe,const EnsPGene gene,AjPList dbes)4569 AjBool ensDatabaseentryFetchAllMastersByGene(
4570     EnsPDatabaseentry dbe,
4571     const EnsPGene gene,
4572     AjPList dbes)
4573 {
4574     if (!dbe)
4575         return ajFalse;
4576 
4577     if (!gene)
4578         return ajFalse;
4579 
4580     if (!dbes)
4581         return ajFalse;
4582 
4583     return ensDatabaseentryadaptorFetchAllMastersByGene(
4584         dbe->Adaptor,
4585         dbe,
4586         gene,
4587         dbes);
4588 }
4589 
4590 
4591 
4592 
4593 /* @func ensDatabaseentryFetchAllMastersByTranscript **************************
4594 **
4595 ** Fetch all Ensembl Database Entry objects which are masters of an
4596 ** Ensembl Database Entry and linked to an Ensembl Transcript.
4597 **
4598 ** @cc Bio::EnsEMBL::DBEntry::get_all_masters
4599 ** @param [u] dbe [EnsPDatabaseentry] Ensembl Database Entry
4600 ** @param [r] transcript [const EnsPTranscript] Ensembl Transcript
4601 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
4602 **
4603 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
4604 **
4605 ** @release 6.4.0
4606 ** @@
4607 ******************************************************************************/
4608 
ensDatabaseentryFetchAllMastersByTranscript(EnsPDatabaseentry dbe,const EnsPTranscript transcript,AjPList dbes)4609 AjBool ensDatabaseentryFetchAllMastersByTranscript(
4610     EnsPDatabaseentry dbe,
4611     const EnsPTranscript transcript,
4612     AjPList dbes)
4613 {
4614     if (!dbe)
4615         return ajFalse;
4616 
4617     if (!transcript)
4618         return ajFalse;
4619 
4620     if (!dbes)
4621         return ajFalse;
4622 
4623     return ensDatabaseentryadaptorFetchAllMastersByTranscript(
4624         dbe->Adaptor,
4625         dbe,
4626         transcript,
4627         dbes);
4628 }
4629 
4630 
4631 
4632 
4633 /* @func ensDatabaseentryFetchAllMastersByTranslation *************************
4634 **
4635 ** Fetch all Ensembl Database Entry objects which are masters of an
4636 ** Ensembl Database Entry and linked to an Ensembl Translation.
4637 **
4638 ** @cc Bio::EnsEMBL::DBEntry::get_all_masters
4639 ** @param [u] dbe [EnsPDatabaseentry] Ensembl Database Entry
4640 ** @param [r] translation [const EnsPTranslation] Ensembl Translation
4641 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
4642 **
4643 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
4644 **
4645 ** @release 6.4.0
4646 ** @@
4647 ******************************************************************************/
4648 
ensDatabaseentryFetchAllMastersByTranslation(EnsPDatabaseentry dbe,const EnsPTranslation translation,AjPList dbes)4649 AjBool ensDatabaseentryFetchAllMastersByTranslation(
4650     EnsPDatabaseentry dbe,
4651     const EnsPTranslation translation,
4652     AjPList dbes)
4653 {
4654     if (!dbe)
4655         return ajFalse;
4656 
4657     if (!translation)
4658         return ajFalse;
4659 
4660     if (!dbes)
4661         return ajFalse;
4662 
4663     return ensDatabaseentryadaptorFetchAllMastersByTranslation(
4664         dbe->Adaptor,
4665         dbe,
4666         translation,
4667         dbes);
4668 }
4669 
4670 
4671 
4672 
4673 /* @datasection [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor *****
4674 **
4675 ** @nam2rule Databaseentryadaptor Functions for manipulating
4676 ** Ensembl Database Entry Adaptor objects
4677 **
4678 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor
4679 ** @cc CVS Revision: 1.175
4680 ** @cc CVS Tag: branch-ensembl-68
4681 **
4682 ******************************************************************************/
4683 
4684 
4685 
4686 
4687 /* @funcstatic databaseentryadaptorFetchAllbyStatement ************************
4688 **
4689 ** Run a SQL statement against an Ensembl Database Adaptor and consolidate the
4690 ** results into an AJAX List of Ensembl Database Entry objects.
4691 **
4692 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
4693 ** @param [r] statement [const AjPStr] SQL statement
4694 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
4695 **
4696 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
4697 **
4698 ** @release 6.4.0
4699 ** @@
4700 ******************************************************************************/
4701 
databaseentryadaptorFetchAllbyStatement(EnsPDatabaseentryadaptor dbea,const AjPStr statement,AjPList dbes)4702 static AjBool databaseentryadaptorFetchAllbyStatement(
4703     EnsPDatabaseentryadaptor dbea,
4704     const AjPStr statement,
4705     AjPList dbes)
4706 {
4707     double score  = 0.0;
4708     double evalue = 0.0;
4709 
4710     ajint ierqryidt = 0;
4711     ajint iertrgidt = 0;
4712     ajint ierqrysrt = 0;
4713     ajint ierqryend = 0;
4714     ajint iertrgsrt = 0;
4715     ajint iertrgend = 0;
4716 
4717     ajuint xrefid     = 0U;
4718     ajuint edbid      = 0U;
4719     ajuint objectid   = 0U;
4720     ajuint objxrfid   = 0U;
4721     ajuint analysisid = 0U;
4722     ajuint sourceid   = 0U;
4723 
4724     ajuint *Pidentifier = NULL;
4725 
4726     AjBool debug = AJFALSE;
4727     AjBool ident = AJFALSE;
4728 
4729     AjPSqlstatement sqls = NULL;
4730     AjISqlrow sqli       = NULL;
4731     AjPSqlrow sqlr       = NULL;
4732 
4733     AjPStr primaryid         = NULL;
4734     AjPStr displayid         = NULL;
4735     AjPStr version           = NULL;
4736     AjPStr description       = NULL;
4737     AjPStr linkageannotation = NULL;
4738     AjPStr infotext          = NULL;
4739     AjPStr infotype          = NULL;
4740     AjPStr objecttype        = NULL;
4741 
4742     AjPStr synonym = NULL;
4743 
4744     AjPStr cigar    = NULL;
4745     AjPStr olinkage = NULL;
4746 
4747     AjPTable dbetable = NULL;
4748     AjPTable linkages = NULL;
4749     AjPTable synonyms = NULL;
4750 
4751     EnsEExternalreferenceInfotype   erit = ensEExternalreferenceInfotypeNULL;
4752     EnsEExternalreferenceObjecttype erot = ensEExternalreferenceObjecttypeNULL;
4753 
4754     EnsPAnalysis analysis  = NULL;
4755     EnsPAnalysisadaptor aa = NULL;
4756 
4757     EnsPDatabaseadaptor dba = NULL;
4758 
4759     EnsPDatabaseentry dbe       = NULL;
4760     EnsPDatabaseentry sourcedbe = NULL;
4761 
4762     EnsPExternaldatabase edb         = NULL;
4763     EnsPExternaldatabaseadaptor edba = NULL;
4764 
4765     debug = ajDebugTest("databaseentryadaptorFetchAllbyStatement");
4766 
4767     if (debug)
4768         ajDebug("databaseentryadaptorFetchAllbyStatement\n"
4769                 "  dbea %p\n"
4770                 "  statement '%S'\n"
4771                 "  dbes %p\n",
4772                 dbea,
4773                 statement,
4774                 dbes);
4775 
4776     if (!dbea)
4777         return ajFalse;
4778 
4779     if (!statement)
4780         return ajFalse;
4781 
4782     if (!dbes)
4783         return ajFalse;
4784 
4785     dba = ensDatabaseentryadaptorGetDatabaseadaptor(dbea);
4786 
4787     aa   = ensRegistryGetAnalysisadaptor(dba);
4788     edba = ensRegistryGetExternaldatabaseadaptor(dba);
4789 
4790     dbetable = ajTableuintNew(0U);
4791 
4792     ajTableSetDestroyvalue(
4793         dbetable,
4794         (void (*)(void **)) &ensDatabaseentryDel);
4795 
4796     linkages = ensTableuintliststrNewLen(0U);
4797     synonyms = ensTableuintliststrNewLen(0U);
4798 
4799     sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
4800 
4801     if (ajSqlrowGetColumns(sqlr) >= 10U)
4802         ident = ajTrue;
4803     else
4804         ident = ajFalse;
4805 
4806     sqli = ajSqlrowiterNew(sqls);
4807 
4808     while (!ajSqlrowiterDone(sqli))
4809     {
4810         /* "xref" SQL table */
4811         xrefid      = 0U;
4812         edbid       = 0U;
4813         primaryid   = ajStrNew();
4814         displayid   = ajStrNew();
4815         version     = ajStrNew();
4816         description = ajStrNew();
4817         infotype    = ajStrNew();
4818         erit        = ensEExternalreferenceInfotypeNULL;
4819         infotext    = ajStrNew();
4820         /* "external_synonym" SQL table */
4821         synonym     = ajStrNew();
4822 
4823         if (ident)
4824         {
4825             /* "object_xref" SQL table */
4826             objxrfid   = 0U;
4827             objectid   = 0U;
4828             objecttype = ajStrNew();
4829             erot       = ensEExternalreferenceObjecttypeNULL;
4830             linkageannotation = ajStrNew();
4831             analysisid = 0U;
4832             /* "identity_xref" SQL table */
4833             ierqryidt  = 0;
4834             iertrgidt  = 0;
4835             ierqrysrt  = 0;
4836             ierqryend  = 0;
4837             iertrgsrt  = 0;
4838             iertrgend  = 0;
4839             cigar      = ajStrNew();
4840             score      = 0.0;
4841             evalue     = 0.0;
4842             /* "ontology_xref" SQL table */
4843             olinkage   = ajStrNew();
4844             sourceid   = 0U;
4845         }
4846 
4847         sqlr = ajSqlrowiterGet(sqli);
4848 
4849         /* "xref" SQL table */
4850         ajSqlcolumnToUint(sqlr, &xrefid);
4851         ajSqlcolumnToUint(sqlr, &edbid);
4852         ajSqlcolumnToStr(sqlr, &primaryid);
4853         ajSqlcolumnToStr(sqlr, &displayid);
4854         ajSqlcolumnToStr(sqlr, &version);
4855         ajSqlcolumnToStr(sqlr, &description);
4856         ajSqlcolumnToStr(sqlr, &infotype);
4857         ajSqlcolumnToStr(sqlr, &infotext);
4858         /* "external_synonym SQL table */
4859         ajSqlcolumnToStr(sqlr, &synonym);
4860 
4861         if (ident)
4862         {
4863             /* "object_xref" SQL table */
4864             ajSqlcolumnToUint(sqlr, &objxrfid);
4865             ajSqlcolumnToUint(sqlr, &objectid);
4866             ajSqlcolumnToStr(sqlr, &objecttype);
4867             ajSqlcolumnToStr(sqlr, &linkageannotation);
4868             ajSqlcolumnToUint(sqlr, &analysisid);
4869             /* "identity_xref" SQL table */
4870             ajSqlcolumnToInt(sqlr, &ierqryidt);
4871             ajSqlcolumnToInt(sqlr, &iertrgidt);
4872             ajSqlcolumnToInt(sqlr, &ierqrysrt);
4873             ajSqlcolumnToInt(sqlr, &ierqryend);
4874             ajSqlcolumnToInt(sqlr, &iertrgsrt);
4875             ajSqlcolumnToInt(sqlr, &iertrgend);
4876             ajSqlcolumnToStr(sqlr, &cigar);
4877             ajSqlcolumnToDouble(sqlr, &score);
4878             ajSqlcolumnToDouble(sqlr, &evalue);
4879             /* "ontology_xref" SQL table */
4880             ajSqlcolumnToStr(sqlr, &olinkage);
4881             ajSqlcolumnToUint(sqlr, &sourceid);
4882         }
4883 
4884         dbe = (EnsPDatabaseentry) ajTableFetchmodV(dbetable,
4885                                                    (const void *) &xrefid);
4886 
4887         if (debug)
4888         {
4889             ajDebug("databaseentryadaptorFetchAllbyStatement "
4890                     "xrefid %u dbe %p\n",
4891                     xrefid, dbe);
4892 
4893             ensDatabaseentryTrace(dbe, 1U);
4894         }
4895 
4896         if (!dbe)
4897         {
4898             erit = ensExternalreferenceInfotypeFromStr(infotype);
4899 
4900 #if AJFALSE
4901             /* The info_type field can be NULL. */
4902             if (!erit)
4903                 ajFatal("databaseentryadaptorFetchAllbyStatement "
4904                         "encountered unexpected string '%S' in the "
4905                         "'xref.infotype' field.\n",
4906                         infotype);
4907 #endif /* AJFALSE */
4908 
4909             if (ident)
4910             {
4911                 erot = ensExternalreferenceObjecttypeFromStr(objecttype);
4912 
4913                 if (!erot)
4914                     ajFatal("databaseentryadaptorFetchAllbyStatement "
4915                             "encountered unexpected string '%S' in the "
4916                             "'object_xref.ensembl_object_type' field.\n",
4917                             objecttype);
4918             }
4919 
4920             ensAnalysisadaptorFetchByIdentifier(aa, analysisid, &analysis);
4921 
4922             ensExternaldatabaseadaptorFetchByIdentifier(edba, edbid, &edb);
4923 
4924             dbe = ensDatabaseentryNewIni(dbea,
4925                                          xrefid,
4926                                          analysis,
4927                                          edb,
4928                                          primaryid,
4929                                          displayid,
4930                                          version,
4931                                          description,
4932                                          linkageannotation,
4933                                          infotext,
4934                                          erit,
4935                                          erot,
4936                                          objectid);
4937 
4938             ajListPushAppend(dbes, (void *) dbe);
4939 
4940             ensAnalysisDel(&analysis);
4941 
4942             ensExternaldatabaseDel(&edb);
4943 
4944             AJNEW0(Pidentifier);
4945 
4946             *Pidentifier = xrefid;
4947 
4948             ajTablePut(dbetable,
4949                        (void *) Pidentifier,
4950                        (void *) ensDatabaseentryNewRef(dbe));
4951 
4952             /* An external reference with a similarity score. */
4953 
4954             if (ierqryidt)
4955             {
4956                 dbe->Identityreference =
4957                     ensIdentityreferenceNewIni(cigar,
4958                                                ierqrysrt,
4959                                                ierqryend,
4960                                                ierqryidt,
4961                                                iertrgsrt,
4962                                                iertrgend,
4963                                                iertrgidt,
4964                                                score,
4965                                                evalue);
4966             }
4967         }
4968 
4969         if (debug)
4970         {
4971             ajDebug("databaseentryadaptorFetchAllbyStatement "
4972                     "xrefid %u dbe %p\n",
4973                     xrefid, dbe);
4974 
4975             ensDatabaseentryTrace(dbe, 1U);
4976         }
4977 
4978         if (ajStrGetLen(synonym) &&
4979             (!ensTableuintliststrRegister(synonyms, xrefid, synonym)))
4980             ajListstrPushAppend(dbe->Synonyms, ajStrNewRef(synonym));
4981 
4982         if (ident && ajStrGetLen(olinkage) &&
4983             (!ensTableuintliststrRegister(linkages, xrefid, olinkage)))
4984         {
4985             ensDatabaseentryadaptorFetchByIdentifier(dbea,
4986                                                      sourceid,
4987                                                      &sourcedbe);
4988 
4989             ensDatabaseentryAddOntologylinkage(dbe, olinkage, sourcedbe);
4990 
4991             ensDatabaseentryDel(&sourcedbe);
4992         }
4993 
4994         ajStrDel(&primaryid);
4995         ajStrDel(&displayid);
4996         ajStrDel(&version);
4997         ajStrDel(&description);
4998         ajStrDel(&infotype);
4999         ajStrDel(&infotext);
5000         ajStrDel(&synonym);
5001 
5002         if (ident)
5003         {
5004             ajStrDel(&linkageannotation);
5005             ajStrDel(&objecttype);
5006             ajStrDel(&cigar);
5007             ajStrDel(&olinkage);
5008         }
5009     }
5010 
5011     ajSqlrowiterDel(&sqli);
5012 
5013     ensDatabaseadaptorSqlstatementDel(dba, &sqls);
5014 
5015     ajTableDel(&dbetable);
5016 
5017     ensTableuintliststrDelete(&linkages);
5018     ensTableuintliststrDelete(&synonyms);
5019 
5020     return ajTrue;
5021 }
5022 
5023 
5024 
5025 
5026 /* @section member retrieval **************************************************
5027 **
5028 ** Functions for returning members of an Ensembl Database Entry Adaptor
5029 ** object.
5030 **
5031 ** @fdata [EnsPDatabaseentryadaptor]
5032 **
5033 ** @nam3rule Get Return Ensembl Database Entry Adaptor attribute(s)
5034 ** @nam4rule Databaseadaptor Return the Ensembl Database Adaptor
5035 **
5036 ** @argrule * dbea [EnsPDatabaseentryadaptor]
5037 ** Ensembl Database Entry Adaptor
5038 **
5039 ** @valrule Databaseadaptor [EnsPDatabaseadaptor]
5040 ** Ensembl Database Adaptor or NULL
5041 **
5042 ** @fcategory use
5043 ******************************************************************************/
5044 
5045 
5046 
5047 
5048 /* @func ensDatabaseentryadaptorGetDatabaseadaptor ****************************
5049 **
5050 ** Get the Ensembl Database Adaptor member of an
5051 ** Ensembl Database Entry Adaptor.
5052 **
5053 ** @cc Bio::EnsEMBL::DBSQL::BaseAdaptor::db
5054 ** @param [u] dbea [EnsPDatabaseentryadaptor]
5055 ** Ensembl Database Entry Adaptor
5056 **
5057 ** @return [EnsPDatabaseadaptor] Ensembl Database Adaptor or NULL
5058 **
5059 ** @release 6.2.0
5060 ** @@
5061 ******************************************************************************/
5062 
ensDatabaseentryadaptorGetDatabaseadaptor(EnsPDatabaseentryadaptor dbea)5063 EnsPDatabaseadaptor ensDatabaseentryadaptorGetDatabaseadaptor(
5064     EnsPDatabaseentryadaptor dbea)
5065 {
5066     return dbea;
5067 }
5068 
5069 
5070 
5071 
5072 /* @section object retrieval **************************************************
5073 **
5074 ** Functions for fetching Ensembl Database Entry objects from an
5075 ** Ensembl SQL database.
5076 **
5077 ** @fdata [EnsPDatabaseentryadaptor]
5078 **
5079 ** @nam3rule Fetch       Fetch Ensembl Database Entry object(s)
5080 ** @nam4rule All         Fetch all Ensembl Database Entry objects
5081 ** @nam5rule Dependents  Fetch all Ensembl Database Entry objects,
5082 **                       which depend on an Ensembl Database Entry
5083 ** @nam5rule Masters     Fetch all Ensembl Database Entry objects,
5084 **                       which are masters of an Ensembl Database Entry
5085 ** @nam6rule By          Fetch all by a criterion
5086 ** @nam7rule Gene        Fetch all by an Ensembl Gene
5087 ** @nam7rule Transcript  Fetch all by an Ensembl Transcript
5088 ** @nam7rule Translation Fetch all by an Ensembl Translation
5089 ** @nam4rule Allby       Fetch all Ensembl Database Entry objects
5090 **                       matching a criterion
5091 ** @nam5rule Description Featch all by a description
5092 ** @nam5rule Gene        Fetch all by an Ensembl Gene
5093 ** @nam5rule Name        Fetch all by a name
5094 ** @nam5rule Object      Fetch all by an Ensembl Object
5095 ** @nam5rule Source      Fetch all by an Ensembl External Database name
5096 ** @nam5rule Transcript  Fetch all by an Ensembl Transcript
5097 ** @nam5rule Translation Fetch all by an Ensembl Translation
5098 ** @nam4rule By          Fetch one Ensembl Database Entry object
5099 **                       matching a criterion
5100 ** @nam5rule Accession   Fetch by an accession
5101 ** @nam5rule Identifier  Fetch by an SQL database-internal identifier
5102 **
5103 ** @argrule * dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5104 ** @argrule Dependents dbe [const EnsPDatabaseentry] Ensembl Database Entry
5105 ** @argrule Masters dbe [const EnsPDatabaseentry] Ensembl Database Entry
5106 ** @argrule ByGene gene [const EnsPGene]
5107 ** Ensembl Gene
5108 ** @argrule ByTranscript transcript [const EnsPTranscript]
5109 ** Ensembl Transcript
5110 ** @argrule ByTranslation translation [const EnsPTranslation]
5111 ** Ensembl Translation
5112 ** @argrule All dbes [AjPList] AJAX List of Ensembl Database Entry objects
5113 ** @argrule AllbyDescription description [const AjPStr] Description
5114 ** @argrule AllbyDescription dbname [const AjPStr]
5115 ** Ensembl External Database name
5116 ** @argrule AllbyGene gene [const EnsPGene]
5117 ** Ensembl Gene
5118 ** @argrule AllbyGene dbname [const AjPStr]
5119 ** Ensembl External Database name
5120 ** @argrule AllbyGene dbtype [EnsEExternaldatabaseType]
5121 ** Ensembl External Database type
5122 ** @argrule AllbyName name [const AjPStr]
5123 ** Name
5124 ** @argrule AllbyName dbname [const AjPStr]
5125 ** Ensembl External Database name
5126 ** @argrule AllbyObject objectidentifier [ajuint]
5127 ** Ensembl Object identifier
5128 ** @argrule AllbyObject objecttype [const AjPStr]
5129 ** Ensembl Object type
5130 ** @argrule AllbyObject dbname [const AjPStr]
5131 ** Ensembl External Database name
5132 ** @argrule AllbyObject dbtype [EnsEExternaldatabaseType]
5133 ** Ensembl External Database Type
5134 ** @argrule AllbySource source [const AjPStr] Source
5135 ** @argrule AllbyTranscript transcript [const EnsPTranscript]
5136 ** Ensembl Transcript
5137 ** @argrule AllbyTranscript dbname [const AjPStr]
5138 ** Ensembl External Database name
5139 ** @argrule AllbyTranscript dbtype [EnsEExternaldatabaseType]
5140 ** Ensembl External Database Type
5141 ** @argrule AllbyTranslation translation [const EnsPTranslation]
5142 ** Ensembl Translation
5143 ** @argrule AllbyTranslation dbname [const AjPStr]
5144 ** Ensembl External Database name
5145 ** @argrule AllbyTranslation dbtype [EnsEExternaldatabaseType]
5146 ** Ensembl External Database Type
5147 ** @argrule Allby dbes [AjPList] AJAX List of Ensembl Database Entry objects
5148 ** @argrule ByAccession dbname [const AjPStr] Ensembl Exernal Database name
5149 ** @argrule ByAccession accession [const AjPStr] Ensembl External Reference
5150 ** primary identifier
5151 ** @argrule ByAccession Pdbe [EnsPDatabaseentry*] Ensembl Database Entry
5152 ** address
5153 ** @argrule ByIdentifier identifier [ajuint] SQL database-internal identifier
5154 ** @argrule ByIdentifier Pdbe [EnsPDatabaseentry*] Ensembl Database Entry
5155 ** address
5156 **
5157 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
5158 **
5159 ** @fcategory use
5160 ******************************************************************************/
5161 
5162 
5163 
5164 
5165 /* @funcstatic databaseentryadaptorFetchAllDependenciesByObject ***************
5166 **
5167 ** Fetch all Ensembl Database Entry objects which are dependent on an
5168 ** Ensembl Database Entry.
5169 **
5170 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::_get_all_dm
5171 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::_get_all_dm_sth
5172 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::_get_all_dm_loc_sth
5173 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5174 ** @param [r] constraint [const AjPStr] SQL constraint
5175 ** @param [r] objecttype [const AjPStr] Ensembl Object type
5176 **                                      (Gene, Transcript or Translation)
5177 ** @param [r] objectidentifier [ajuint] Ensembl Object identifier
5178 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5179 **
5180 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5181 **
5182 ** @release 6.4.0
5183 ** @@
5184 ******************************************************************************/
5185 
databaseentryadaptorFetchAllDependenciesByObject(EnsPDatabaseentryadaptor dbea,const AjPStr constraint,const AjPStr objecttype,ajuint objectidentifier,AjPList dbes)5186 static AjBool databaseentryadaptorFetchAllDependenciesByObject(
5187     EnsPDatabaseentryadaptor dbea,
5188     const AjPStr constraint,
5189     const AjPStr objecttype,
5190     ajuint objectidentifier,
5191     AjPList dbes)
5192 {
5193     char *txtobjecttype = NULL;
5194 
5195     AjBool result = AJFALSE;
5196 
5197     AjPStr statement = NULL;
5198 
5199     if (!dbea)
5200         return ajFalse;
5201 
5202     if ((constraint == NULL) || (ajStrGetLen(constraint) == 0))
5203         return ajFalse;
5204 
5205     if (!dbes)
5206         return ajFalse;
5207 
5208     if ((objecttype != NULL) && (ajStrGetLen(objecttype) > 0))
5209     {
5210         ensDatabaseadaptorEscapeC(
5211             ensDatabaseentryadaptorGetDatabaseadaptor(dbea),
5212             &txtobjecttype,
5213             objecttype);
5214 
5215         statement = ajFmtStr(
5216             "SELECT "
5217             "xref.xref_id, "
5218             "xref.external_db_id, "
5219             "xref.dbprimary_acc, "
5220             "xref.display_label, "
5221             "xref.version, "
5222             "xref.description, "
5223             "xref.info_type, "
5224             "xref.info_text, "
5225             "external_synonym.synonym "
5226             "FROM "
5227             "(xref, dependent_xref, object_xref) "
5228             "LEFT JOIN "
5229             "external_synonym "
5230             "ON "
5231             "xref.xref_id = external_synonym.xref_id "
5232             "WHERE "
5233             "xref.xref_id = object_xref.xref_id "
5234             "AND "
5235             "object_xref.ensembl_object_type = '%s' "
5236             "AND "
5237             "object_xref.ensembl_id = %u "
5238             "AND ",
5239             txtobjecttype,
5240             objectidentifier);
5241 
5242         ajCharDel(&txtobjecttype);
5243     }
5244     else
5245         statement = ajStrNewC(
5246             "SELECT "
5247             "xref.xref_id, "
5248             "xref.external_db_id, "
5249             "xref.dbprimary_acc, "
5250             "xref.display_label, "
5251             "xref.version, "
5252             "xref.description, "
5253             "xref.info_type, "
5254             "xref.info_text, "
5255             "external_synonym.synonym "
5256             "FROM "
5257             "(xref, dependent_xref) "
5258             "LEFT JOIN "
5259             "external_synonym "
5260             "ON "
5261             "xref.xref_id = external_synonym.xref_id "
5262             "WHERE ");
5263 
5264     ajStrAppendS(&statement, constraint);
5265 
5266     result = databaseentryadaptorFetchAllbyStatement(dbea, statement, dbes);
5267 
5268     ajStrDel(&statement);
5269 
5270     return result;
5271 }
5272 
5273 
5274 
5275 
5276 /* @func ensDatabaseentryadaptorFetchAllDependents ****************************
5277 **
5278 ** Fetch all Ensembl Database Entry objects which are dependent on an
5279 ** Ensembl Database Entry.
5280 **
5281 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::get_all_dependents
5282 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5283 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
5284 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5285 **
5286 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5287 **
5288 ** @release 6.4.0
5289 ** @@
5290 ******************************************************************************/
5291 
ensDatabaseentryadaptorFetchAllDependents(EnsPDatabaseentryadaptor dbea,const EnsPDatabaseentry dbe,AjPList dbes)5292 AjBool ensDatabaseentryadaptorFetchAllDependents(
5293     EnsPDatabaseentryadaptor dbea,
5294     const EnsPDatabaseentry dbe,
5295     AjPList dbes)
5296 {
5297     AjBool result = AJFALSE;
5298 
5299     AjPStr constraint = NULL;
5300 
5301     if (!dbea)
5302         return ajFalse;
5303 
5304     if (!dbe)
5305         return ajFalse;
5306 
5307     if (!dbes)
5308         return ajFalse;
5309 
5310     constraint = ajFmtStr(
5311         "dependent_xref.master_xref_id = %u "
5312         "AND "
5313         "dependent_xref.dependent_xref_id = xref.xref_id",
5314         dbe->Identifier);
5315 
5316     result = databaseentryadaptorFetchAllDependenciesByObject(
5317         dbea,
5318         constraint,
5319         (AjPStr) NULL,
5320         0,
5321         dbes);
5322 
5323     ajStrDel(&constraint);
5324 
5325     return result;
5326 }
5327 
5328 
5329 
5330 
5331 /* @func ensDatabaseentryadaptorFetchAllDependentsByGene **********************
5332 **
5333 ** Fetch all Ensembl Database Entry objects which are dependent on an
5334 ** Ensembl Database Entry and linked to an Ensembl Gene.
5335 **
5336 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::get_all_dependents
5337 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5338 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
5339 ** @param [r] gene [const EnsPGene] Ensembl Gene
5340 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5341 **
5342 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5343 **
5344 ** @release 6.4.0
5345 ** @@
5346 ******************************************************************************/
5347 
ensDatabaseentryadaptorFetchAllDependentsByGene(EnsPDatabaseentryadaptor dbea,const EnsPDatabaseentry dbe,const EnsPGene gene,AjPList dbes)5348 AjBool ensDatabaseentryadaptorFetchAllDependentsByGene(
5349     EnsPDatabaseentryadaptor dbea,
5350     const EnsPDatabaseentry dbe,
5351     const EnsPGene gene,
5352     AjPList dbes)
5353 {
5354     AjBool result = AJFALSE;
5355 
5356     AjPStr constraint = NULL;
5357     AjPStr objecttype = NULL;
5358 
5359     if (!dbea)
5360         return ajFalse;
5361 
5362     if (!dbe)
5363         return ajFalse;
5364 
5365     if (!gene)
5366         return ajFalse;
5367 
5368     if (!dbes)
5369         return ajFalse;
5370 
5371     objecttype = ajStrNewC("gene");
5372 
5373     constraint = ajFmtStr(
5374         "dependent_xref.master_xref_id = %u "
5375         "AND "
5376         "dependent_xref.dependent_xref_id = xref.xref_id",
5377         dbe->Identifier);
5378 
5379     result = databaseentryadaptorFetchAllDependenciesByObject(
5380         dbea,
5381         constraint,
5382         objecttype,
5383         ensGeneGetIdentifier(gene),
5384         dbes);
5385 
5386     ajStrDel(&constraint);
5387     ajStrDel(&objecttype);
5388 
5389     return result;
5390 }
5391 
5392 
5393 
5394 
5395 /* @func ensDatabaseentryadaptorFetchAllDependentsByTranscript ****************
5396 **
5397 ** Fetch all Ensembl Database Entry objects which are dependent on an
5398 ** Ensembl Database Entry and linked to an Ensembl Transcript.
5399 **
5400 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::get_all_dependents
5401 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5402 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
5403 ** @param [r] transcript [const EnsPTranscript] Ensembl Transcript
5404 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5405 **
5406 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5407 **
5408 ** @release 6.4.0
5409 ** @@
5410 ******************************************************************************/
5411 
ensDatabaseentryadaptorFetchAllDependentsByTranscript(EnsPDatabaseentryadaptor dbea,const EnsPDatabaseentry dbe,const EnsPTranscript transcript,AjPList dbes)5412 AjBool ensDatabaseentryadaptorFetchAllDependentsByTranscript(
5413     EnsPDatabaseentryadaptor dbea,
5414     const EnsPDatabaseentry dbe,
5415     const EnsPTranscript transcript,
5416     AjPList dbes)
5417 {
5418     AjBool result = AJFALSE;
5419 
5420     AjPStr constraint = NULL;
5421     AjPStr objecttype = NULL;
5422 
5423     if (!dbea)
5424         return ajFalse;
5425 
5426     if (!dbe)
5427         return ajFalse;
5428 
5429     if (!transcript)
5430         return ajFalse;
5431 
5432     if (!dbes)
5433         return ajFalse;
5434 
5435     objecttype = ajStrNewC("transcript");
5436 
5437     constraint = ajFmtStr(
5438         "dependent_xref.master_xref_id = %u "
5439         "AND "
5440         "dependent_xref.dependent_xref_id = xref.xref_id",
5441         dbe->Identifier);
5442 
5443     result = databaseentryadaptorFetchAllDependenciesByObject(
5444         dbea,
5445         constraint,
5446         objecttype,
5447         ensTranscriptGetIdentifier(transcript),
5448         dbes);
5449 
5450     ajStrDel(&constraint);
5451     ajStrDel(&objecttype);
5452 
5453     return result;
5454 }
5455 
5456 
5457 
5458 
5459 /* @func ensDatabaseentryadaptorFetchAllDependentsByTranslation ***************
5460 **
5461 ** Fetch all Ensembl Database Entry objects which are dependent on an
5462 ** Ensembl Database Entry and linked to an Ensembl Translation.
5463 **
5464 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::get_all_dependents
5465 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5466 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
5467 ** @param [r] translation [const EnsPTranslation] Ensembl Translation
5468 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5469 **
5470 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5471 **
5472 ** @release 6.4.0
5473 ** @@
5474 ******************************************************************************/
5475 
ensDatabaseentryadaptorFetchAllDependentsByTranslation(EnsPDatabaseentryadaptor dbea,const EnsPDatabaseentry dbe,const EnsPTranslation translation,AjPList dbes)5476 AjBool ensDatabaseentryadaptorFetchAllDependentsByTranslation(
5477     EnsPDatabaseentryadaptor dbea,
5478     const EnsPDatabaseentry dbe,
5479     const EnsPTranslation translation,
5480     AjPList dbes)
5481 {
5482     AjBool result = AJFALSE;
5483 
5484     AjPStr constraint = NULL;
5485     AjPStr objecttype = NULL;
5486 
5487     if (!dbea)
5488         return ajFalse;
5489 
5490     if (!dbe)
5491         return ajFalse;
5492 
5493     if (!translation)
5494         return ajFalse;
5495 
5496     if (!dbes)
5497         return ajFalse;
5498 
5499     objecttype = ajStrNewC("translation");
5500 
5501     constraint = ajFmtStr(
5502         "dependent_xref.master_xref_id = %u "
5503         "AND "
5504         "dependent_xref.dependent_xref_id = xref.xref_id",
5505         dbe->Identifier);
5506 
5507     result = databaseentryadaptorFetchAllDependenciesByObject(
5508         dbea,
5509         constraint,
5510         objecttype,
5511         ensTranslationGetIdentifier(translation),
5512         dbes);
5513 
5514     ajStrDel(&constraint);
5515     ajStrDel(&objecttype);
5516 
5517     return result;
5518 }
5519 
5520 
5521 
5522 
5523 /* @func ensDatabaseentryadaptorFetchAllMasters *******************************
5524 **
5525 ** Fetch all Ensembl Database Entry objects which are masters of an
5526 ** Ensembl Database Entry.
5527 **
5528 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::get_all_masters
5529 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5530 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
5531 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5532 **
5533 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5534 **
5535 ** @release 6.4.0
5536 ** @@
5537 ******************************************************************************/
5538 
ensDatabaseentryadaptorFetchAllMasters(EnsPDatabaseentryadaptor dbea,const EnsPDatabaseentry dbe,AjPList dbes)5539 AjBool ensDatabaseentryadaptorFetchAllMasters(
5540     EnsPDatabaseentryadaptor dbea,
5541     const EnsPDatabaseentry dbe,
5542     AjPList dbes)
5543 {
5544     AjBool result = AJFALSE;
5545 
5546     AjPStr constraint = NULL;
5547 
5548     if (!dbea)
5549         return ajFalse;
5550 
5551     if (!dbe)
5552         return ajFalse;
5553 
5554     if (dbes)
5555         return ajFalse;
5556 
5557     constraint = ajFmtStr(
5558         "dependent_xref.dependent_xref_id = %u "
5559         "AND "
5560         "dependent_xref.master_xref_id = xref.xref_id",
5561         dbe->Identifier);
5562 
5563     result = databaseentryadaptorFetchAllDependenciesByObject(
5564         dbea,
5565         constraint,
5566         (AjPStr) NULL,
5567         0,
5568         dbes);
5569 
5570     ajStrDel(&constraint);
5571 
5572     return result;
5573 }
5574 
5575 
5576 
5577 
5578 /* @func ensDatabaseentryadaptorFetchAllMastersByGene *************************
5579 **
5580 ** Fetch all Ensembl Database Entry objects which are masters of an
5581 ** Ensembl Database Entry and linked to an Ensembl Gene.
5582 **
5583 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::get_all_masters
5584 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5585 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
5586 ** @param [r] gene [const EnsPGene] Ensembl Gene
5587 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5588 **
5589 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5590 **
5591 ** @release 6.4.0
5592 ** @@
5593 ******************************************************************************/
5594 
ensDatabaseentryadaptorFetchAllMastersByGene(EnsPDatabaseentryadaptor dbea,const EnsPDatabaseentry dbe,const EnsPGene gene,AjPList dbes)5595 AjBool ensDatabaseentryadaptorFetchAllMastersByGene(
5596     EnsPDatabaseentryadaptor dbea,
5597     const EnsPDatabaseentry dbe,
5598     const EnsPGene gene,
5599     AjPList dbes)
5600 {
5601     AjBool result = AJFALSE;
5602 
5603     AjPStr constraint = NULL;
5604     AjPStr objecttype = NULL;
5605 
5606     if (!dbea)
5607         return ajFalse;
5608 
5609     if (!dbe)
5610         return ajFalse;
5611 
5612     if (!gene)
5613         return ajFalse;
5614 
5615     if (!dbes)
5616         return ajFalse;
5617 
5618     objecttype = ajStrNewC("gene");
5619 
5620     constraint = ajFmtStr(
5621         "dependent_xref.master_xref_id = %u "
5622         "AND "
5623         "dependent_xref.master_xref_id = xref.xref_id",
5624         dbe->Identifier);
5625 
5626     result = databaseentryadaptorFetchAllDependenciesByObject(
5627         dbea,
5628         constraint,
5629         objecttype,
5630         ensGeneGetIdentifier(gene),
5631         dbes);
5632 
5633     ajStrDel(&constraint);
5634     ajStrDel(&objecttype);
5635 
5636     return result;
5637 }
5638 
5639 
5640 
5641 
5642 /* @func ensDatabaseentryadaptorFetchAllMastersByTranscript *******************
5643 **
5644 ** Fetch all Ensembl Database Entry objects which are masters of an
5645 ** Ensembl Database Entry and linked to an Ensembl Transcript.
5646 **
5647 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::get_all_masters
5648 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5649 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
5650 ** @param [r] transcript [const EnsPTranscript] Ensembl Transcript
5651 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5652 **
5653 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5654 **
5655 ** @release 6.4.0
5656 ** @@
5657 ******************************************************************************/
5658 
ensDatabaseentryadaptorFetchAllMastersByTranscript(EnsPDatabaseentryadaptor dbea,const EnsPDatabaseentry dbe,const EnsPTranscript transcript,AjPList dbes)5659 AjBool ensDatabaseentryadaptorFetchAllMastersByTranscript(
5660     EnsPDatabaseentryadaptor dbea,
5661     const EnsPDatabaseentry dbe,
5662     const EnsPTranscript transcript,
5663     AjPList dbes)
5664 {
5665     AjBool result = AJFALSE;
5666 
5667     AjPStr constraint = NULL;
5668     AjPStr objecttype = NULL;
5669 
5670     if (!dbea)
5671         return ajFalse;
5672 
5673     if (!dbe)
5674         return ajFalse;
5675 
5676     if (!transcript)
5677         return ajFalse;
5678 
5679     if (!dbes)
5680         return ajFalse;
5681 
5682     objecttype = ajStrNewC("transcript");
5683 
5684     constraint = ajFmtStr(
5685         "dependent_xref.master_xref_id = %u "
5686         "AND "
5687         "dependent_xref.master_xref_id = xref.xref_id",
5688         dbe->Identifier);
5689 
5690     result = databaseentryadaptorFetchAllDependenciesByObject(
5691         dbea,
5692         constraint,
5693         objecttype,
5694         ensTranscriptGetIdentifier(transcript),
5695         dbes);
5696 
5697     ajStrDel(&constraint);
5698     ajStrDel(&objecttype);
5699 
5700     return result;
5701 }
5702 
5703 
5704 
5705 
5706 /* @func ensDatabaseentryadaptorFetchAllMastersByTranslation ******************
5707 **
5708 ** Fetch all Ensembl Database Entry objects which are masters of an
5709 ** Ensembl Database Entry and linked to an Ensembl Translation.
5710 **
5711 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::get_all_masters
5712 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5713 ** @param [r] dbe [const EnsPDatabaseentry] Ensembl Database Entry
5714 ** @param [r] translation [const EnsPTranslation] Ensembl Translation
5715 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5716 **
5717 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5718 **
5719 ** @release 6.4.0
5720 ** @@
5721 ******************************************************************************/
5722 
ensDatabaseentryadaptorFetchAllMastersByTranslation(EnsPDatabaseentryadaptor dbea,const EnsPDatabaseentry dbe,const EnsPTranslation translation,AjPList dbes)5723 AjBool ensDatabaseentryadaptorFetchAllMastersByTranslation(
5724     EnsPDatabaseentryadaptor dbea,
5725     const EnsPDatabaseentry dbe,
5726     const EnsPTranslation translation,
5727     AjPList dbes)
5728 {
5729     AjBool result = AJFALSE;
5730 
5731     AjPStr constraint = NULL;
5732     AjPStr objecttype = NULL;
5733 
5734     if (!dbea)
5735         return ajFalse;
5736 
5737     if (!dbe)
5738         return ajFalse;
5739 
5740     if (!translation)
5741         return ajFalse;
5742 
5743     if (!dbes)
5744         return ajFalse;
5745 
5746     objecttype = ajStrNewC("translation");
5747 
5748     constraint = ajFmtStr(
5749         "dependent_xref.master_xref_id = %u "
5750         "AND "
5751         "dependent_xref.master_xref_id = xref.xref_id",
5752         dbe->Identifier);
5753 
5754     result = databaseentryadaptorFetchAllDependenciesByObject(
5755         dbea,
5756         constraint,
5757         objecttype,
5758         ensTranslationGetIdentifier(translation),
5759         dbes);
5760 
5761     ajStrDel(&constraint);
5762     ajStrDel(&objecttype);
5763 
5764     return result;
5765 }
5766 
5767 
5768 
5769 
5770 /* @func ensDatabaseentryadaptorFetchAllbyDescription *************************
5771 **
5772 ** Fetch all Ensembl Database Entry objects via a description.
5773 **
5774 ** The caller is responsible for deleting the Ensembl Database Entry objects
5775 ** before deleting the AJAX List.
5776 **
5777 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::fetch_all_by_description
5778 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5779 ** @param [r] description [const AjPStr] Description
5780 ** @param [rN] dbname [const AjPStr] External Database name
5781 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5782 **
5783 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5784 **
5785 ** @release 6.4.0
5786 ** @@
5787 ******************************************************************************/
5788 
ensDatabaseentryadaptorFetchAllbyDescription(EnsPDatabaseentryadaptor dbea,const AjPStr description,const AjPStr dbname,AjPList dbes)5789 AjBool ensDatabaseentryadaptorFetchAllbyDescription(
5790     EnsPDatabaseentryadaptor dbea,
5791     const AjPStr description,
5792     const AjPStr dbname,
5793     AjPList dbes)
5794 {
5795     char *txtdescription = NULL;
5796     char *txtdbname      = NULL;
5797 
5798     AjBool result = AJFALSE;
5799 
5800     AjPStr statement = NULL;
5801 
5802     EnsPDatabaseadaptor dba = NULL;
5803 
5804     if (!dbea)
5805         return ajFalse;
5806 
5807     if (!(description && ajStrGetLen(description)))
5808         return ajFalse;
5809 
5810     if (!dbes)
5811         return ajFalse;
5812 
5813     dba = ensDatabaseentryadaptorGetDatabaseadaptor(dbea);
5814 
5815     ensDatabaseadaptorEscapeC(dba, &txtdescription, description);
5816 
5817     statement = ajFmtStr(
5818         "SELECT "
5819         "xref.xref_id, "
5820         "xref.external_db_id, "
5821         "xref.dbprimary_acc, "
5822         "xref.display_label, "
5823         "xref.version, "
5824         "xref.description, "
5825         "xref.info_type, "
5826         "xref.info_text, "
5827         "external_synonym.synonym "
5828         "FROM "
5829         "(xref, external_db) "
5830         "LEFT JOIN "
5831         "external_synonym "
5832         "ON "
5833         "xref.xref_id = external_synonym.xref_id "
5834         "WHERE "
5835         "xref.external_db_id = external_db.external_db_id "
5836         "AND "
5837         "xref.description LIKE '%s'",
5838         txtdescription);
5839 
5840     ajCharDel(&txtdescription);
5841 
5842     if (dbname && ajStrGetLen(dbname))
5843     {
5844         ensDatabaseadaptorEscapeC(dba, &txtdbname, dbname);
5845 
5846         ajFmtPrintAppS(&statement, " AND exDB.db_name = '%s'", txtdbname);
5847 
5848         ajCharDel(&txtdbname);
5849     }
5850 
5851     result = databaseentryadaptorFetchAllbyStatement(dbea, statement, dbes);
5852 
5853     ajStrDel(&statement);
5854 
5855     return result;
5856 }
5857 
5858 
5859 
5860 
5861 /* @func ensDatabaseentryadaptorFetchAllbyGene ********************************
5862 **
5863 ** Fetch all Ensembl Database Entry objects by an Ensembl Gene.
5864 **
5865 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::fetch_all_by_Gene
5866 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5867 ** @param [r] gene [const EnsPGene] Ensembl Gene
5868 ** @param [rN] dbname [const AjPStr] Ensembl External Database name
5869 ** @param [uN] dbtype [EnsEExternaldatabaseType] Ensembl External Database type
5870 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5871 **
5872 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5873 **
5874 ** @release 6.4.0
5875 ** @@
5876 ******************************************************************************/
5877 
ensDatabaseentryadaptorFetchAllbyGene(EnsPDatabaseentryadaptor dbea,const EnsPGene gene,const AjPStr dbname,EnsEExternaldatabaseType dbtype,AjPList dbes)5878 AjBool ensDatabaseentryadaptorFetchAllbyGene(
5879     EnsPDatabaseentryadaptor dbea,
5880     const EnsPGene gene,
5881     const AjPStr dbname,
5882     EnsEExternaldatabaseType dbtype,
5883     AjPList dbes)
5884 {
5885     AjBool result = AJFALSE;
5886 
5887     AjPStr objecttype = NULL;
5888 
5889     if (!dbea)
5890         return ajFalse;
5891 
5892     if (!gene)
5893         return ajFalse;
5894 
5895     if (!dbes)
5896         return ajFalse;
5897 
5898     objecttype = ajStrNewC("Gene");
5899 
5900     result = ensDatabaseentryadaptorFetchAllbyObject(
5901         dbea,
5902         ensGeneGetIdentifier(gene),
5903         objecttype,
5904         dbname,
5905         dbtype,
5906         dbes);
5907 
5908     ajStrDel(&objecttype);
5909 
5910     return result;
5911 }
5912 
5913 
5914 
5915 
5916 /* @func ensDatabaseentryadaptorFetchAllbyName ********************************
5917 **
5918 ** Fetch all Ensembl Database Entry objects by a name.
5919 **
5920 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::fetch_all_by_name
5921 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
5922 ** @param [r] name [const AjPStr] Name
5923 ** @param [rN] dbname [const AjPStr] Ensembl External Database name
5924 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
5925 **
5926 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
5927 **
5928 ** @release 6.5.0
5929 ** @@
5930 ******************************************************************************/
5931 
ensDatabaseentryadaptorFetchAllbyName(EnsPDatabaseentryadaptor dbea,const AjPStr name,const AjPStr dbname,AjPList dbes)5932 AjBool ensDatabaseentryadaptorFetchAllbyName(
5933     EnsPDatabaseentryadaptor dbea,
5934     const AjPStr name,
5935     const AjPStr dbname,
5936     AjPList dbes)
5937 {
5938     char *txtdbname = NULL;
5939     char *txtname   = NULL;
5940 
5941     AjBool result = AJFALSE;
5942 
5943     AjPStr statement = NULL;
5944 
5945     EnsPDatabaseadaptor dba = NULL;
5946 
5947     if (!dbea)
5948         return ajFalse;
5949 
5950     if (!name)
5951         return ajFalse;
5952 
5953     if (!dbes)
5954         return ajFalse;
5955 
5956     dba = ensDatabaseentryadaptorGetDatabaseadaptor(dbea);
5957 
5958     ensDatabaseadaptorEscapeC(dba, &txtname, name);
5959 
5960     statement = ajFmtStr(
5961         "SELECT "
5962         "xref.xref_id, "
5963         "xref.external_db_id, "
5964         "xref.dbprimary_acc, "
5965         "xref.display_label, "
5966         "xref.version, "
5967         "xref.description, "
5968         "xref.info_type, "
5969         "xref.info_text, "
5970         "external_synonym.synonym "
5971         "FROM "
5972         "(xref, external_db) "
5973         "LEFT JOIN "
5974         "external_synonym "
5975         "ON "
5976         "xref.xref_id = external_synonym.xref_id "
5977         "WHERE "
5978         "xref.external_db_id = external_db.external_db_id "
5979         "AND "
5980         "(xref.dbprimary_acc = '%s' or xref.display_label = '%s')",
5981         txtname,
5982         txtname);
5983 
5984     if (dbname && ajStrGetLen(dbname))
5985     {
5986         ensDatabaseadaptorEscapeC(dba, &txtdbname, dbname);
5987 
5988         if (ajStrFindAnyK(dbname, '%') > 0)
5989             ajFmtPrintAppS(&statement,
5990                            " AND external_db.db_name like '%s'",
5991                            txtdbname);
5992         else
5993             ajFmtPrintAppS(&statement,
5994                            " AND external_db.db_name = '%s'",
5995                            txtdbname);
5996 
5997         ajCharDel(&txtdbname);
5998     }
5999 
6000     result = databaseentryadaptorFetchAllbyStatement(dbea, statement, dbes);
6001 
6002     ajStrDel(&statement);
6003 
6004     if (!ajListGetLength(dbes))
6005     {
6006         ajDebug("ensDatabaseentryadaptorFetchAllbyName did not get an "
6007                 "Ensembl Database Entry for database name '%S' and "
6008                 "name '%S'.\n", dbname, name);
6009 
6010         /*
6011         ** This is a minor hack that means that results still come back even
6012         ** when a mistake was made and no InterPro accessions were loaded into
6013         ** the xref table. This has happened in the past and had the result of
6014         ** breaking Ensembl DomainView.
6015         */
6016 
6017         if (ajStrMatchC(dbname, "interpro"))
6018         {
6019             statement = ajFmtStr(
6020                 "SELECT "
6021                 "'0', "                /* xref.xref_id */
6022                 "'0', "                /* xref.external_db_id */
6023                 "interpro.interpro_ac, " /* xref.dbprimary_acc */
6024                 "interpro.id, "        /* xref.display_label */
6025                 "NULL, "               /* xref.version */
6026                 "NULL, "               /* xref.description */
6027                 "NULL, "               /* xref.info_type */
6028                 "NULL, "               /* xref.info_text */
6029                 "NULL "                /* external_synonym.synonym */
6030                 "FROM "
6031                 "interpro "
6032                 "WHERE "
6033                 "interpro.interpro_ac = '%s'",
6034                 txtname);
6035 
6036             result = databaseentryadaptorFetchAllbyStatement(
6037                 dbea,
6038                 statement,
6039                 dbes);
6040 
6041             ajStrDel(&statement);
6042         }
6043     }
6044 
6045     ajCharDel(&txtname);
6046 
6047     return result;
6048 }
6049 
6050 
6051 
6052 
6053 /* @func ensDatabaseentryadaptorFetchAllbyObject ******************************
6054 **
6055 ** Fetch all Ensembl Database Entry objects by an Ensembl Object.
6056 **
6057 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::_fetch_by_object_type
6058 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
6059 ** @param [r] objectidentifier [ajuint] Ensembl Object identifier
6060 ** @param [r] objecttype [const AjPStr] Ensembl Object type
6061 ** @param [rN] dbname [const AjPStr] Ensembl External Database name, which may
6062 ** be an SQL pattern containing "%" matching any number of characters
6063 ** @param [uN] dbtype [EnsEExternaldatabaseType] Ensembl External Database Type
6064 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
6065 **
6066 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
6067 **
6068 ** @release 6.4.0
6069 ** @@
6070 ******************************************************************************/
6071 
ensDatabaseentryadaptorFetchAllbyObject(EnsPDatabaseentryadaptor dbea,ajuint objectidentifier,const AjPStr objecttype,const AjPStr dbname,EnsEExternaldatabaseType dbtype,AjPList dbes)6072 AjBool ensDatabaseentryadaptorFetchAllbyObject(
6073     EnsPDatabaseentryadaptor dbea,
6074     ajuint objectidentifier,
6075     const AjPStr objecttype,
6076     const AjPStr dbname,
6077     EnsEExternaldatabaseType dbtype,
6078     AjPList dbes)
6079 {
6080     char *txtobjecttype = NULL;
6081     char *txtdbname = NULL;
6082 
6083     AjBool result = AJFALSE;
6084 
6085     AjPStr statement = NULL;
6086 
6087     EnsPDatabaseadaptor dba = NULL;
6088 
6089     if (!dbea)
6090         return ajFalse;
6091 
6092     if (!objectidentifier)
6093         return ajFalse;
6094 
6095     if (!objecttype)
6096         return ajFalse;
6097 
6098     dba = ensDatabaseentryadaptorGetDatabaseadaptor(dbea);
6099 
6100     ensDatabaseadaptorEscapeC(dba, &txtobjecttype, objecttype);
6101 
6102     statement = ajFmtStr(
6103         "SELECT "
6104         "xref.xref_id, "
6105         "xref.external_db_id, "
6106         "xref.dbprimary_acc, "
6107         "xref.display_label, "
6108         "xref.version, "
6109         "xref.description, "
6110         "xref.info_type, "
6111         "xref.info_text, "
6112         "external_synonym.synonym, "
6113         "object_xref.object_xref_id, "
6114         "object_xref.ensembl_id, "
6115         "object_xref.ensembl_object_type, "
6116         "object_xref.linkage_annotation, "
6117         "object_xref.analysis_id, "
6118         "identity_xref.xref_identity, "
6119         "identity_xref.ensembl_identity, "
6120         "identity_xref.xref_start, "
6121         "identity_xref.xref_end, "
6122         "identity_xref.ensembl_start, "
6123         "identity_xref.ensembl_end, "
6124         "identity_xref.cigar_line, "
6125         "identity_xref.score, "
6126         "identity_xref.evalue, "
6127         "ontology_xref.linkage_type, "
6128         "ontology_xref.source_xref_id "
6129         "FROM "
6130         "(xref, external_db, object_xref) "
6131         "LEFT JOIN "
6132         "external_synonym "
6133         "ON "
6134         "xref.xref_id = external_synonym.xref_id "
6135         "LEFT JOIN "
6136         "identity_xref "
6137         "ON "
6138         "object_xref.object_xref_id = "
6139         "identity_xref.object_xref_id "
6140         "LEFT JOIN "
6141         "ontology_xref "
6142         "ON "
6143         "object_xref.object_xref_id = "
6144         "ontology_xref.object_xref_id "
6145         "WHERE "
6146         "xref.external_db_id = external_db.external_db_id "
6147         "AND "
6148         "xref.xref_id = object_xref.xref_id "
6149         "AND "
6150         "object_xref.ensembl_id = %u "
6151         "AND "
6152         "object_xref.ensembl_object_type = '%s'",
6153         objectidentifier,
6154         txtobjecttype);
6155 
6156     ajCharDel(&txtobjecttype);
6157 
6158     if (dbname && ajStrGetLen(dbname))
6159     {
6160         ensDatabaseadaptorEscapeC(dba, &txtdbname, dbname);
6161 
6162         if (ajStrFindAnyK(dbname, '%') > 0)
6163             ajFmtPrintAppS(&statement,
6164                            " AND external_db.db_name like '%s'",
6165                            txtdbname);
6166         else
6167             ajFmtPrintAppS(&statement,
6168                            " AND external_db.db_name = '%s'",
6169                            txtdbname);
6170 
6171         ajCharDel(&txtdbname);
6172     }
6173 
6174     if (dbtype)
6175         ajFmtPrintAppS(&statement,
6176                        " AND external_db.type = '%s'",
6177                        ensExternaldatabaseTypeToChar(dbtype));
6178 
6179     result = databaseentryadaptorFetchAllbyStatement(dbea, statement, dbes);
6180 
6181     ajStrDel(&statement);
6182 
6183     return result;
6184 }
6185 
6186 
6187 
6188 
6189 /* @func ensDatabaseentryadaptorFetchAllbySource ******************************
6190 **
6191 ** Fetch all Ensembl Database Entry objects via an
6192 ** Ensembl External Database name.
6193 **
6194 ** The caller is responsible for deleting the Ensembl Database Entry objects
6195 ** before deleting the AJAX List.
6196 **
6197 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::fetch_all_by_source
6198 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
6199 ** @param [r] source [const AjPStr] Source
6200 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
6201 **
6202 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
6203 **
6204 ** @release 6.4.0
6205 ** @@
6206 ******************************************************************************/
6207 
ensDatabaseentryadaptorFetchAllbySource(EnsPDatabaseentryadaptor dbea,const AjPStr source,AjPList dbes)6208 AjBool ensDatabaseentryadaptorFetchAllbySource(
6209     EnsPDatabaseentryadaptor dbea,
6210     const AjPStr source,
6211     AjPList dbes)
6212 {
6213     char *txtsource = NULL;
6214 
6215     AjBool result = AJFALSE;
6216 
6217     AjPStr statement = NULL;
6218 
6219     if (!dbea)
6220         return ajFalse;
6221 
6222     if (!(source && ajStrGetLen(source)))
6223         return ajFalse;
6224 
6225     if (!dbes)
6226         return ajFalse;
6227 
6228     ensDatabaseadaptorEscapeC(
6229         ensDatabaseentryadaptorGetDatabaseadaptor(dbea),
6230         &txtsource,
6231         source);
6232 
6233     statement = ajFmtStr(
6234         "SELECT "
6235         "xref.xref_id, "
6236         "xref.external_db_id, "
6237         "xref.dbprimary_acc, "
6238         "xref.display_label, "
6239         "xref.version, "
6240         "xref.description, "
6241         "xref.info_type, "
6242         "xref.info_text, "
6243         "external_synonym.synonym "
6244         "FROM "
6245         "(xref, external_db) "
6246         "LEFT JOIN "
6247         "external_synonym "
6248         "ON "
6249         "xref.xref_id = external_synonym.xref_id "
6250         "WHERE "
6251         "xref.external_db_id = external_db.external_db_id "
6252         "AND "
6253         "external_db.db_name LIKE '%s'",
6254         txtsource);
6255 
6256     ajCharDel(&txtsource);
6257 
6258     result = databaseentryadaptorFetchAllbyStatement(dbea, statement, dbes);
6259 
6260     ajStrDel(&statement);
6261 
6262     return result;
6263 }
6264 
6265 
6266 
6267 
6268 /* @func ensDatabaseentryadaptorFetchAllbyTranscript **************************
6269 **
6270 ** Fetch all Ensembl Database Entry objects by an Ensembl Transcript.
6271 **
6272 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::fetch_all_by_Transcript
6273 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
6274 ** @param [r] transcript [const EnsPTranscript] Ensembl Transcript
6275 ** @param [rN] dbname [const AjPStr] Ensembl External Database name
6276 ** @param [uN] dbtype [EnsEExternaldatabaseType] Ensembl External Database type
6277 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
6278 **
6279 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
6280 **
6281 ** @release 6.4.0
6282 ** @@
6283 ******************************************************************************/
6284 
ensDatabaseentryadaptorFetchAllbyTranscript(EnsPDatabaseentryadaptor dbea,const EnsPTranscript transcript,const AjPStr dbname,EnsEExternaldatabaseType dbtype,AjPList dbes)6285 AjBool ensDatabaseentryadaptorFetchAllbyTranscript(
6286     EnsPDatabaseentryadaptor dbea,
6287     const EnsPTranscript transcript,
6288     const AjPStr dbname,
6289     EnsEExternaldatabaseType dbtype,
6290     AjPList dbes)
6291 {
6292     AjBool result = AJFALSE;
6293 
6294     AjPStr objecttype = NULL;
6295 
6296     if (!dbea)
6297         return ajFalse;
6298 
6299     if (!transcript)
6300         return ajFalse;
6301 
6302     if (!dbes)
6303         return ajFalse;
6304 
6305     objecttype = ajStrNewC("Transcript");
6306 
6307     result = ensDatabaseentryadaptorFetchAllbyObject(
6308         dbea,
6309         ensTranscriptGetIdentifier(transcript),
6310         objecttype,
6311         dbname,
6312         dbtype,
6313         dbes);
6314 
6315     ajStrDel(&objecttype);
6316 
6317     return result;
6318 }
6319 
6320 
6321 
6322 
6323 /* @func ensDatabaseentryadaptorFetchAllbyTranslation *************************
6324 **
6325 ** Fetch all Ensembl Database Entry objects by an Ensembl Translation.
6326 **
6327 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::fetch_all_by_Translation
6328 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
6329 ** @param [r] translation [const EnsPTranslation] Ensembl Translation
6330 ** @param [rN] dbname [const AjPStr] Ensembl External Database name
6331 ** @param [uN] dbtype [EnsEExternaldatabaseType] Ensembl External Database type
6332 ** @param [u] dbes [AjPList] AJAX List of Ensembl Database Entry objects
6333 **
6334 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
6335 **
6336 ** @release 6.4.0
6337 ** @@
6338 ******************************************************************************/
6339 
ensDatabaseentryadaptorFetchAllbyTranslation(EnsPDatabaseentryadaptor dbea,const EnsPTranslation translation,const AjPStr dbname,EnsEExternaldatabaseType dbtype,AjPList dbes)6340 AjBool ensDatabaseentryadaptorFetchAllbyTranslation(
6341     EnsPDatabaseentryadaptor dbea,
6342     const EnsPTranslation translation,
6343     const AjPStr dbname,
6344     EnsEExternaldatabaseType dbtype,
6345     AjPList dbes)
6346 {
6347     AjBool result = AJFALSE;
6348 
6349     AjPStr objecttype = NULL;
6350 
6351     if (!dbea)
6352         return ajFalse;
6353 
6354     if (!translation)
6355         return ajFalse;
6356 
6357     if (!dbes)
6358         return ajFalse;
6359 
6360     objecttype = ajStrNewC("Translation");
6361 
6362     result = ensDatabaseentryadaptorFetchAllbyObject(
6363         dbea,
6364         ensTranslationGetIdentifier(translation),
6365         objecttype,
6366         dbname,
6367         dbtype,
6368         dbes);
6369 
6370     ajStrDel(&objecttype);
6371 
6372     return result;
6373 }
6374 
6375 
6376 
6377 
6378 /* @func ensDatabaseentryadaptorFetchByAccession ******************************
6379 **
6380 ** Fetch an Ensembl Database Entry via its database name and accession number.
6381 **
6382 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::fetch_by_db_accession
6383 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
6384 ** @param [r] dbname [const AjPStr] Ensembl Exernal Database name
6385 ** @param [r] accession [const AjPStr] Ensembl External Reference primary
6386 ** identifier
6387 ** @param [wP] Pdbe [EnsPDatabaseentry*] Ensembl Database Entry address
6388 **
6389 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
6390 **
6391 ** @release 6.4.0
6392 ** @@
6393 ******************************************************************************/
6394 
ensDatabaseentryadaptorFetchByAccession(EnsPDatabaseentryadaptor dbea,const AjPStr dbname,const AjPStr accession,EnsPDatabaseentry * Pdbe)6395 AjBool ensDatabaseentryadaptorFetchByAccession(
6396     EnsPDatabaseentryadaptor dbea,
6397     const AjPStr dbname,
6398     const AjPStr accession,
6399     EnsPDatabaseentry *Pdbe)
6400 {
6401     char *txtdbname = NULL;
6402     char *txtaccession = NULL;
6403 
6404     AjBool result = AJFALSE;
6405 
6406     AjPList dbes = NULL;
6407 
6408     AjPStr statement = NULL;
6409 
6410     EnsPDatabaseentry dbe = NULL;
6411 
6412     if (!dbea)
6413         return ajFalse;
6414 
6415     if (!dbname)
6416         return ajFalse;
6417 
6418     if (!accession)
6419         return ajFalse;
6420 
6421     if (!Pdbe)
6422         return ajFalse;
6423 
6424     *Pdbe = NULL;
6425 
6426     ensDatabaseadaptorEscapeC(
6427         ensDatabaseentryadaptorGetDatabaseadaptor(dbea),
6428         &txtdbname,
6429         dbname);
6430 
6431     ensDatabaseadaptorEscapeC(
6432         ensDatabaseentryadaptorGetDatabaseadaptor(dbea),
6433         &txtaccession,
6434         accession);
6435 
6436     statement = ajFmtStr(
6437         "SELECT "
6438         "xref.xref_id, "
6439         "xref.external_db_id, "
6440         "xref.dbprimary_acc, "
6441         "xref.display_label, "
6442         "xref.version, "
6443         "xref.description, "
6444         "xref.info_type, "
6445         "xref.info_text, "
6446         "external_synonym.synonym "
6447         "FROM (xref) "
6448         "LEFT JOIN "
6449         "external_synonym "
6450         "ON "
6451         "xref.xref_id = external_synonym.xref_id "
6452         "WHERE "
6453         "xref.dbprimary_acc = '%s' "
6454         "AND "
6455         "external_db.db_name = '%s'",
6456         txtaccession,
6457         txtdbname);
6458 
6459     dbes = ajListNew();
6460 
6461     result = databaseentryadaptorFetchAllbyStatement(dbea, statement, dbes);
6462 
6463     ajStrDel(&statement);
6464 
6465     if (!ajListGetLength(dbes))
6466     {
6467         ajDebug("ensDatabaseentryadaptorFetchByAccession did not get an "
6468                 "Ensembl Database Entry for database name '%S' and "
6469                 "accession '%S'.\n", dbname, accession);
6470 
6471         /*
6472         ** This is a minor hack that means that results still come back even
6473         ** when a mistake was made and no InterPro accessions were loaded into
6474         ** the xref table. This has happened in the past and had the result of
6475         ** breaking Ensembl DomainView.
6476         */
6477 
6478         if (ajStrMatchC(dbname, "interpro"))
6479         {
6480             statement = ajFmtStr(
6481                 "SELECT "
6482                 "'0', "                /* xref.xref_id */
6483                 "'0', "                /* xref.external_db_id */
6484                 "interpro.interpro_ac, " /* xref.dbprimary_acc */
6485                 "interpro.id, "        /* xref.display_label */
6486                 "NULL, "               /* xref.version */
6487                 "NULL, "               /* xref.description */
6488                 "NULL, "               /* xref.info_type */
6489                 "NULL, "               /* xref.info_text */
6490                 "NULL "                /* external_synonym.synonym */
6491                 "FROM "
6492                 "interpro "
6493                 "WHERE "
6494                 "interpro.interpro_ac = '%s'",
6495                 txtaccession);
6496 
6497             result = databaseentryadaptorFetchAllbyStatement(
6498                 dbea,
6499                 statement,
6500                 dbes);
6501 
6502             ajStrDel(&statement);
6503         }
6504     }
6505 
6506     if (ajListGetLength(dbes) > 1)
6507         ajDebug("ensDatabaseentryadaptorFetchByAccession got more than "
6508                 "one Ensembl Database Entry for database name '%S' and "
6509                 "accession '%S'.\n", dbname, accession);
6510 
6511     ajListPop(dbes, (void **) Pdbe);
6512 
6513     while (ajListPop(dbes, (void **) &dbe))
6514         ensDatabaseentryDel(&dbe);
6515 
6516     ajListFree(&dbes);
6517 
6518     ajCharDel(&txtdbname);
6519     ajCharDel(&txtaccession);
6520 
6521     return result;
6522 }
6523 
6524 
6525 
6526 
6527 /* @func ensDatabaseentryadaptorFetchByIdentifier *****************************
6528 **
6529 ** Fetch an Ensembl Database Entry via its SQL database-internal identifier.
6530 **
6531 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::fetch_by_dbID
6532 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
6533 ** @param [r] identifier [ajuint] SQL database-internal identifier
6534 ** @param [wP] Pdbe [EnsPDatabaseentry*] Ensembl Database Entry address
6535 **
6536 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
6537 **
6538 ** @release 6.2.0
6539 ** @@
6540 ******************************************************************************/
6541 
ensDatabaseentryadaptorFetchByIdentifier(EnsPDatabaseentryadaptor dbea,ajuint identifier,EnsPDatabaseentry * Pdbe)6542 AjBool ensDatabaseentryadaptorFetchByIdentifier(
6543     EnsPDatabaseentryadaptor dbea,
6544     ajuint identifier,
6545     EnsPDatabaseentry *Pdbe)
6546 {
6547     AjBool result = AJFALSE;
6548 
6549     AjPList dbes = NULL;
6550 
6551     AjPStr statement = NULL;
6552 
6553     EnsPDatabaseentry dbe = NULL;
6554 
6555     if (!dbea)
6556         return ajFalse;
6557 
6558     if (!identifier)
6559         return ajFalse;
6560 
6561     if (!Pdbe)
6562         return ajFalse;
6563 
6564     *Pdbe = NULL;
6565 
6566     statement = ajFmtStr(
6567         "SELECT "
6568         "xref.xref_id, "
6569         "xref.external_db_id, "
6570         "xref.dbprimary_acc, "
6571         "xref.display_label, "
6572         "xref.version, "
6573         "xref.description, "
6574         "xref.info_type, "
6575         "xref.info_text, "
6576         "external_synonym.synonym "
6577         "FROM "
6578         "(xref) "
6579         "LEFT JOIN "
6580         "external_synonym "
6581         "ON "
6582         "xref.xref_id = external_synonym.xref_id "
6583         "WHERE "
6584         "xref.xref_id = %u",
6585         identifier);
6586 
6587     dbes = ajListNew();
6588 
6589     result = databaseentryadaptorFetchAllbyStatement(dbea, statement, dbes);
6590 
6591     ajStrDel(&statement);
6592 
6593     if (!ajListGetLength(dbes))
6594         ajDebug("ensDatabaseentryadaptorFetchById did not get an "
6595                 "Ensembl Database Entry for identifier %u.\n",
6596                 identifier);
6597 
6598     if (ajListGetLength(dbes) > 1)
6599         ajDebug("ensDatabaseentryadaptorFetchById got more than one (%Lu) "
6600                 "Ensembl Database Entry for identifier %u.\n",
6601                 ajListGetLength(dbes), identifier);
6602 
6603     ajListPop(dbes, (void **) Pdbe);
6604 
6605     while (ajListPop(dbes, (void **) &dbe))
6606         ensDatabaseentryDel(&dbe);
6607 
6608     ajListFree(&dbes);
6609 
6610     return result;
6611 }
6612 
6613 
6614 
6615 
6616 /* @section accessory object retrieval ****************************************
6617 **
6618 ** Functions for retrieving objects releated to Ensembl Database Entry objects
6619 ** from an Ensembl SQL database.
6620 **
6621 ** @fdata [EnsPDatabaseentryadaptor]
6622 **
6623 ** @nam3rule Retrieve Retrieve Ensembl Database Entry-releated object(s)
6624 ** @nam4rule All Retrieve all Ensembl Databse Entry-releated objects
6625 ** @nam5rule Identifiers Retrieve all SQL database-internal identifier objects
6626 ** @nam5rule Geneidentifiers
6627 ** Retrieve all Ensembl Gene identifier objects
6628 ** @nam5rule Transcriptidentifiers
6629 ** Retrieve all Ensembl Transcript identifier objects
6630 ** @nam5rule Translationidentifiers
6631 ** Retrieve all Ensembl Translation identifier objects
6632 ** @nam6rule By Retrieve by a criterion
6633 ** @nam7rule Externalname Retrieve by an Ensembl Database Entry name
6634 ** @nam7rule Externaldatabasename Retrieve by an Ensembl External Database name
6635 **
6636 ** @argrule * dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
6637 ** @argrule Externaldatabasename dbname [const AjPStr]
6638 ** Ensembl External Database name
6639 ** @argrule Externalname name [const AjPStr]
6640 ** Ensembl Database Entry name
6641 ** @argrule Externalname dbname [const AjPStr]
6642 ** Ensembl External Database name
6643 ** @argrule Externalname override [AjBool]
6644 ** Override optimisation of '_' SQL any
6645 ** @argrule * identifiers [AjPTable]
6646 ** AJAX Table of AJAX unsigned integer key data and generic value data
6647 **
6648 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
6649 **
6650 ** @fcategory use
6651 ******************************************************************************/
6652 
6653 
6654 
6655 
6656 /* @funcstatic databaseentryadaptorRetrieveAllIdentifiersByExternalname *******
6657 **
6658 ** Retrieve SQL database-internal Ensembl identifier objects via an
6659 ** Ensembl Database Entry name.
6660 **
6661 ** The caller is responsible for deleting the AJAX unsigned integer objects
6662 ** before deleting the AJAX Table.
6663 **
6664 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::_type_by_external_id
6665 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
6666 ** @param [r] name [const AjPStr] Ensembl Database Entry name
6667 ** @param [r] ensembltype [const AjPStr] Ensembl Object type
6668 ** @param [rN] extratype [const AjPStr] Additional Ensembl Object type
6669 ** @param [rN] dbname [const AjPStr] Ensembl External Database name
6670 ** @param [r] override [AjBool] Override optimisation of '_' SQL any
6671 ** @param [u] identifiers [AjPTable]
6672 ** AJAX Table of
6673 ** AJAX unsigned integer (Ensembl identifier) key data and
6674 ** generic value data
6675 **
6676 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
6677 **
6678 ** @release 6.4.0
6679 ** @@
6680 ******************************************************************************/
6681 
databaseentryadaptorRetrieveAllIdentifiersByExternalname(EnsPDatabaseentryadaptor dbea,const AjPStr name,const AjPStr ensembltype,const AjPStr extratype,const AjPStr dbname,AjBool override,AjPTable identifiers)6682 static AjBool databaseentryadaptorRetrieveAllIdentifiersByExternalname(
6683     EnsPDatabaseentryadaptor dbea,
6684     const AjPStr name,
6685     const AjPStr ensembltype,
6686     const AjPStr extratype,
6687     const AjPStr dbname,
6688     AjBool override,
6689     AjPTable identifiers)
6690 {
6691     char *txtname   = NULL;
6692     char *txtdbname = NULL;
6693 
6694     ajuint *Pidentifier = NULL;
6695 
6696     ajlong strpos = 0;
6697 
6698     AjBool failure = AJFALSE;
6699 
6700     AjPRegexp exp = NULL;
6701 
6702     AjPSqlstatement sqls = NULL;
6703     AjISqlrow sqli       = NULL;
6704     AjPSqlrow sqlr       = NULL;
6705 
6706     AjPStr intname   = NULL;
6707     AjPStr operator  = NULL;
6708     AjPStr statement = NULL;
6709     AjPStr sqlfrom   = NULL;
6710     AjPStr sqlwhere  = NULL;
6711     AjPStr sqlselect = NULL;
6712     AjPStr temporary = NULL;
6713 
6714     EnsPDatabaseadaptor dba = NULL;
6715 
6716     if (!dbea)
6717         return ajFalse;
6718 
6719     if (!(name && ajStrGetLen(name)))
6720         return ajFalse;
6721 
6722     if (!(ensembltype && ajStrGetLen(ensembltype)))
6723         return ajFalse;
6724 
6725     if (!identifiers)
6726         return ajFalse;
6727 
6728     dba = ensDatabaseentryadaptorGetDatabaseadaptor(dbea);
6729 
6730     /*
6731     ** Accept SQL wildcard characters from the second position only to
6732     ** avoid too generic queries, which use too many database resources.
6733     */
6734 
6735     intname = ajStrNewS(name);
6736 
6737     strpos = ajStrFindAnyC(intname, "%_");
6738 
6739     if (strpos == -1)
6740         operator = ajStrNewC("=");
6741     else if (strpos <= 2)
6742     {
6743         if (!override)
6744         {
6745             /*
6746             ** For NCBI RefSeq entries such as NM_00000065, escape the '_' so
6747             ** that SQL LIKE does not have to scan entire tables.
6748             ** Escape only the '_' in the third character position.
6749             */
6750             exp = ajRegCompC("\\w\\w_");
6751             if (ajRegExec(exp, intname))
6752                 ajStrInsertK(&intname, 2, '\\');
6753             else
6754                 failure = ajTrue;
6755             ajRegFree(&exp);
6756 
6757             if (failure)
6758             {
6759                 ajWarn("databaseentryadaptorRetrieveAllIdentifiersByExternalname "
6760                        "got a name '%S', which is too vague and will "
6761                        "monopolise SQL database resources.", intname);
6762                 ajStrDel(&intname);
6763                 return ajFalse;
6764             }
6765         }
6766     }
6767 
6768     if (!operator)
6769         operator = ajStrNewC("LIKE");
6770 
6771     sqlselect = ajStrNewC("object_xref.ensembl_id");
6772     sqlfrom   = ajStrNew();
6773     sqlwhere  = ajStrNew();
6774 
6775     if (extratype && ajStrGetLen(extratype))
6776     {
6777         temporary = ajStrNewS(extratype);
6778 
6779         ajStrFmtLower(&temporary);
6780 
6781         if (ajStrMatchCaseC(temporary, "Translation"))
6782             ajStrAssignC(&sqlselect, "translation.translation_id");
6783         else
6784         {
6785             ajStrDel(&sqlselect);
6786 
6787             sqlselect = ajFmtStr("transcript.%S_id", temporary);
6788         }
6789 
6790         if (ajStrMatchCaseC(ensembltype, "Translation"))
6791         {
6792             ajStrAssignC(&sqlfrom, "transcript, translation");
6793 
6794             ajStrAssignC(&sqlwhere,
6795                          "transcript.is_current = 1 "
6796                          "AND "
6797                          "transcript.transcript_id = "
6798                          "translation.transcript_id "
6799                          "AND "
6800                          "translation.translation_id = "
6801                          "object_xref.ensembl_id");
6802         }
6803         else
6804         {
6805             ajStrAssignC(&sqlfrom, "transcript");
6806 
6807             ajStrDel(&sqlwhere);
6808 
6809             sqlwhere = ajFmtStr("transcript.is_current = 1 "
6810                                 "AND "
6811                                 "transcript.%S_id = object_xref.ensembl_id",
6812                                 ensembltype);
6813         }
6814 
6815         ajStrDel(&temporary);
6816     }
6817 
6818     if (ajStrMatchC(ensembltype, "Gene"))
6819     {
6820         ajStrAssignC(&sqlfrom, "gene");
6821 
6822         ajStrAppendC(&sqlwhere,
6823                      "gene.is_current = 1 "
6824                      "AND "
6825                      "gene.gene_id = object_xref.ensembl_id");
6826 
6827         if (ensDatabaseadaptorGetMultispecies(dba))
6828         {
6829             ajStrAppendC(&sqlfrom, ", seq_region, coord_system");
6830 
6831             ajFmtPrintAppS(&sqlwhere,
6832                            " "
6833                            "AND "
6834                            "gene.seq_region_id = "
6835                            "seq_region.seq_region_id "
6836                            "AND "
6837                            "seq_region.coord_system_id = "
6838                            "coord_system.coord_system_id "
6839                            "AND "
6840                            "coord_system.species_id = %u",
6841                            ensDatabaseadaptorGetIdentifier(dba));
6842         }
6843     }
6844     else if (ajStrMatchCaseC(ensembltype, "Transcript"))
6845     {
6846         ajStrAssignC(&sqlfrom, "transcript");
6847 
6848         ajStrAppendC(&sqlwhere,
6849                      "transcript.is_current = 1 "
6850                      "AND "
6851                      "transcript.transcript_id = object_xref.ensembl_id");
6852 
6853         if (ensDatabaseadaptorGetMultispecies(dba))
6854         {
6855             ajStrAssignC(&sqlfrom, "transcript, seq_region, coord_system");
6856 
6857             ajFmtPrintAppS(&sqlwhere,
6858                            " "
6859                            "AND "
6860                            "transcript.seq_region_id = "
6861                            "seq_region.seq_region_id "
6862                            "AND "
6863                            "seq_region.coord_system_id = "
6864                            "coord_system.coord_system_id "
6865                            "AND "
6866                            "coord_system.species_id = %u",
6867                            ensDatabaseadaptorGetIdentifier(dba));
6868         }
6869     }
6870     else if (ajStrMatchCaseC(ensembltype, "Translation"))
6871     {
6872         ajStrAssignC(&sqlfrom, "transcript, translation");
6873 
6874         ajStrAppendC(&sqlwhere,
6875                      "transcript.is_current = 1 "
6876                      "AND "
6877                      "transcript.transcript_id = translation.transcript_id "
6878                      "AND "
6879                      "translation.translation_id = object_xref.ensembl_id");
6880 
6881         if (ensDatabaseadaptorGetMultispecies(dba))
6882         {
6883             ajStrAppendC(&sqlfrom, ", seq_region, coord_system");
6884 
6885             ajFmtPrintAppS(&sqlwhere,
6886                            " "
6887                            "AND "
6888                            "transcript.seq_region_id = "
6889                            "seq_region.seq_region_id "
6890                            "AND "
6891                            "seq_region.coord_system_id = "
6892                            "coord_system.coord_system_id "
6893                            "AND "
6894                            "coord_system.species_id = %u",
6895                            ensDatabaseadaptorGetIdentifier(dba));
6896         }
6897     }
6898 
6899     if (dbname && ajStrGetLen(dbname))
6900     {
6901         /*
6902         ** Involve the "external_db" SQL table to limit the hits to a
6903         ** particular external database.
6904         */
6905 
6906         ajStrAppendC(&sqlfrom, ", external_db");
6907 
6908         ensDatabaseadaptorEscapeC(dba, &txtdbname, dbname);
6909 
6910         ajFmtPrintAppS(&sqlwhere,
6911                        " "
6912                        "AND "
6913                        "external_db.db_name LIKE '%s%%' "
6914                        "AND "
6915                        "external_db.external_db_id = xref.external_db_id",
6916                        txtdbname);
6917 
6918         ajCharDel(&txtdbname);
6919     }
6920 
6921     ensDatabaseadaptorEscapeC(dba, &txtname, intname);
6922 
6923     statement = ajFmtStr(
6924         "SELECT "
6925         "%S "
6926         "FROM "
6927         "%S, "
6928         "object_xref, "
6929         "xref "
6930         "WHERE "
6931         "%S "
6932         "AND "
6933         "object_xref.xref_id = xref.xref_id "
6934         "AND "
6935         "object_xref.ensembl_object_type = '%S' "
6936         "AND "
6937         "(xref.dbprimary_acc %S '%s' OR xref.display_label %S '%s')",
6938         sqlselect,
6939         sqlfrom,
6940         sqlwhere,
6941         ensembltype,
6942         operator,
6943         txtname,
6944         operator,
6945         txtname);
6946 
6947     sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
6948 
6949     sqli = ajSqlrowiterNew(sqls);
6950 
6951     while (!ajSqlrowiterDone(sqli))
6952     {
6953         AJNEW0(Pidentifier);
6954 
6955         sqlr = ajSqlrowiterGet(sqli);
6956 
6957         ajSqlcolumnToUint(sqlr, Pidentifier);
6958 
6959         if (ajTableMatchV(identifiers, (const void *) Pidentifier))
6960             AJFREE(Pidentifier);
6961         else
6962             ajTablePut(identifiers, (void *) Pidentifier, NULL);
6963     }
6964 
6965     ajSqlrowiterDel(&sqli);
6966 
6967     ensDatabaseadaptorSqlstatementDel(dba, &sqls);
6968 
6969     ajStrDel(&statement);
6970 
6971     /*
6972     ** If an external database name has been passed in, the "xref" and the
6973     ** "object_xref" SQL tables need joining on "xref_id".
6974     */
6975 
6976     if (dbname && ajStrGetLen(dbname))
6977         statement = ajFmtStr(
6978             "SELECT "
6979             "%S "
6980             "FROM "
6981             "%S, "
6982             "external_synonym, "
6983             "object_xref, "
6984             "xref "
6985             "WHERE "
6986             "%S "
6987             "AND "
6988             "external_synonym.synonym %S '%s' "
6989             "AND "
6990             "external_synonym.xref_id = object_xref.xref_id "
6991             "AND "
6992             "object_xref.ensembl_object_type = '%S' "
6993             "AND "
6994             "object_xref.xref_id = xref.xref_id ",
6995             sqlselect,
6996             sqlfrom,
6997             sqlwhere,
6998             operator,
6999             txtname,
7000             ensembltype);
7001     else
7002         statement = ajFmtStr(
7003             "SELECT "
7004             "%S "
7005             "FROM "
7006             "%S, "
7007             "external_synonym, "
7008             "object_xref "
7009             "WHERE "
7010             "%S "
7011             "AND "
7012             "external_synonym.synonym %S '%s' "
7013             "AND "
7014             "external_synonym.xref_id = object_xref.xref_id "
7015             "AND "
7016             "object_xref.ensembl_object_type = '%S'",
7017             sqlselect,
7018             sqlfrom,
7019             sqlwhere,
7020             operator,
7021             txtname,
7022             ensembltype);
7023 
7024     sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
7025 
7026     sqli = ajSqlrowiterNew(sqls);
7027 
7028     while (!ajSqlrowiterDone(sqli))
7029     {
7030         AJNEW0(Pidentifier);
7031 
7032         sqlr = ajSqlrowiterGet(sqli);
7033 
7034         ajSqlcolumnToUint(sqlr, Pidentifier);
7035 
7036         if (ajTableMatchV(identifiers, (const void *) Pidentifier))
7037             AJFREE(Pidentifier);
7038         else
7039             ajTablePut(identifiers, (void *) Pidentifier, NULL);
7040     }
7041 
7042     ajSqlrowiterDel(&sqli);
7043 
7044     ensDatabaseadaptorSqlstatementDel(dba, &sqls);
7045 
7046     ajStrDel(&statement);
7047 
7048     ajCharDel(&txtname);
7049 
7050     ajStrDel(&sqlselect);
7051     ajStrDel(&sqlfrom);
7052     ajStrDel(&sqlwhere);
7053     ajStrDel(&operator);
7054     ajStrDel(&intname);
7055 
7056     return ajTrue;
7057 }
7058 
7059 
7060 
7061 
7062 /* @funcstatic databaseentryadaptorRetrieveAllIdentifiersByExternaldatabasename
7063 **
7064 ** Retrieve SQL database-internal Ensembl identifier objects via an
7065 ** Ensembl External Database name.
7066 **
7067 ** The caller is responsible for deleting the AJAX unsigned integer objects
7068 ** before deleting the AJAX Table.
7069 **
7070 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::_type_by_external_db_id
7071 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
7072 ** @param [r] dbname [const AjPStr] Ensembl External Database name
7073 ** @param [r] ensembltype [const AjPStr] Ensembl Object type
7074 ** @param [rN] extratype [const AjPStr] Additional Ensembl Object type
7075 ** @param [u] identifiers [AjPTable]
7076 ** AJAX Table of
7077 ** AJAX unsigned integer (Ensembl identifier) key data and
7078 ** generic value data
7079 **
7080 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
7081 **
7082 ** @release 6.4.0
7083 ** @@
7084 ** NOTE: This function requires an external database name and not an external
7085 ** database identifier as the Perl API implementation.
7086 ******************************************************************************/
7087 
databaseentryadaptorRetrieveAllIdentifiersByExternaldatabasename(EnsPDatabaseentryadaptor dbea,const AjPStr dbname,const AjPStr ensembltype,const AjPStr extratype,AjPTable identifiers)7088 static AjBool databaseentryadaptorRetrieveAllIdentifiersByExternaldatabasename(
7089     EnsPDatabaseentryadaptor dbea,
7090     const AjPStr dbname,
7091     const AjPStr ensembltype,
7092     const AjPStr extratype,
7093     AjPTable identifiers)
7094 {
7095     char *txtdbname = NULL;
7096 
7097     ajuint *Pidentifier = NULL;
7098 
7099     AjPSqlstatement sqls = NULL;
7100     AjISqlrow sqli       = NULL;
7101     AjPSqlrow sqlr       = NULL;
7102 
7103     AjPStr statement = NULL;
7104     AjPStr sqlfrom   = NULL;
7105     AjPStr sqlwhere  = NULL;
7106     AjPStr sqlselect = NULL;
7107     AjPStr temporary = NULL;
7108 
7109     EnsPDatabaseadaptor dba = NULL;
7110 
7111     if (!dbea)
7112         return ajFalse;
7113 
7114     if (!dbname)
7115         return ajFalse;
7116 
7117     if (!ensembltype)
7118         return ajFalse;
7119 
7120     if (!identifiers)
7121         return ajFalse;
7122 
7123     dba = ensDatabaseentryadaptorGetDatabaseadaptor(dbea);
7124 
7125     sqlselect = ajStrNewC("object_xref.ensembl_id");
7126     sqlfrom   = ajStrNew();
7127     sqlwhere  = ajStrNew();
7128 
7129     if (extratype && ajStrGetLen(extratype))
7130     {
7131         temporary = ajStrNewS(extratype);
7132 
7133         ajStrFmtLower(&temporary);
7134 
7135         if (ajStrMatchCaseC(temporary, "Translation"))
7136             ajStrAssignC(&sqlselect, "translation.translation_id");
7137         else
7138         {
7139             ajStrDel(&sqlselect);
7140 
7141             sqlselect = ajFmtStr("transcript.%S_id", temporary);
7142         }
7143 
7144         if (ajStrMatchCaseC(ensembltype, "Translation"))
7145         {
7146             ajStrAssignC(&sqlfrom, "transcript, translation");
7147 
7148             ajStrAssignC(&sqlwhere,
7149                          "transcript.is_current = 1 "
7150                          "AND "
7151                          "transcript.transcript_id = "
7152                          "translation.transcript_id "
7153                          "AND "
7154                          "translation.translation_id = "
7155                          "object_xref.ensembl_id");
7156         }
7157         else
7158         {
7159             ajStrAssignC(&sqlfrom,"transcript");
7160 
7161             ajStrDel(&sqlwhere);
7162 
7163             sqlwhere = ajFmtStr("transcript.is_current = 1 "
7164                                 "AND "
7165                                 "transcript.%S_id = object_xref.ensembl_id",
7166                                 ensembltype);
7167         }
7168 
7169         ajStrDel(&temporary);
7170     }
7171 
7172     if (ajStrMatchC(ensembltype, "Gene"))
7173     {
7174         ajStrAssignC(&sqlfrom, "gene");
7175 
7176         ajStrAssignC(&sqlwhere,
7177                      "gene.is_current = 1 "
7178                      "AND "
7179                      "gene.gene_id = object_xref.ensembl_id");
7180     }
7181     else if (ajStrMatchCaseC(ensembltype, "Transcript"))
7182     {
7183         ajStrAssignC(&sqlfrom, "transcript");
7184 
7185         ajStrAssignC(&sqlwhere,
7186                      "transcript.is_current = 1 "
7187                      "AND "
7188                      "transcript.transcript_id = object_xref.ensembl_id");
7189     }
7190     else if (ajStrMatchCaseC(ensembltype, "Translation"))
7191     {
7192         ajStrAssignC(&sqlfrom, "transcript, translation");
7193 
7194         ajStrAssignC(&sqlwhere,
7195                      "transcript.is_current = 1 "
7196                      "AND "
7197                      "transcript.transcript_id = translation.transcript_id "
7198                      "AND "
7199                      "translation.translation_id = object_xref.ensembl_id");
7200     }
7201 
7202     ensDatabaseadaptorEscapeC(dba, &txtdbname, dbname);
7203 
7204     statement = ajFmtStr(
7205         "SELECT "
7206         "%S "
7207         "FROM "
7208         "%S, "
7209         "object_xref, "
7210         "xref, "
7211         "external_db "
7212         "WHERE "
7213         "%S "
7214         "AND "
7215         "object_xref.xref_id = xref.xref_id "
7216         "AND "
7217         "object_xref.ensembl_object_type = '%S' "
7218         "AND "
7219         "xref.external_db_id = external_db.external_db_id "
7220         "AND "
7221         "external_db.db_name = '%s'",
7222         sqlselect,
7223         sqlfrom,
7224         sqlwhere,
7225         ensembltype,
7226         txtdbname);
7227 
7228     ajCharDel(&txtdbname);
7229 
7230     sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
7231 
7232     sqli = ajSqlrowiterNew(sqls);
7233 
7234     while (!ajSqlrowiterDone(sqli))
7235     {
7236         AJNEW0(Pidentifier);
7237 
7238         sqlr = ajSqlrowiterGet(sqli);
7239 
7240         ajSqlcolumnToUint(sqlr, Pidentifier);
7241 
7242         if (ajTableMatchV(identifiers, (const void *) Pidentifier))
7243             AJFREE(Pidentifier);
7244         else
7245             ajTablePut(identifiers, (void *) Pidentifier, NULL);
7246     }
7247 
7248     ajSqlrowiterDel(&sqli);
7249 
7250     ensDatabaseadaptorSqlstatementDel(dba, &sqls);
7251 
7252     ajStrDel(&statement);
7253     ajStrDel(&sqlselect);
7254     ajStrDel(&sqlfrom);
7255     ajStrDel(&sqlwhere);
7256 
7257     return ajTrue;
7258 }
7259 
7260 
7261 
7262 
7263 /* @func ensDatabaseentryadaptorRetrieveAllGeneidentifiersByExternaldatabasename
7264 **
7265 ** Retrieve SQL database-internal Ensembl Gene identifier objects via an
7266 ** Ensembl External Database name.
7267 **
7268 ** The caller is responsible for deleting the AJAX unsigned integer objects
7269 ** before deleting the AJAX Table.
7270 **
7271 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::list_gene_ids_by_external_db_id
7272 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
7273 ** @param [r] dbname [const AjPStr] Ensembl External Database name
7274 ** @param [u] identifiers [AjPTable]
7275 ** AJAX Table of
7276 ** AJAX unsigned integer (Ensembl Gene identifier) key data and
7277 ** generic value data
7278 **
7279 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
7280 **
7281 ** @release 6.4.0
7282 ** @@
7283 ******************************************************************************/
7284 
ensDatabaseentryadaptorRetrieveAllGeneidentifiersByExternaldatabasename(EnsPDatabaseentryadaptor dbea,const AjPStr dbname,AjPTable identifiers)7285 AjBool ensDatabaseentryadaptorRetrieveAllGeneidentifiersByExternaldatabasename(
7286     EnsPDatabaseentryadaptor dbea,
7287     const AjPStr dbname,
7288     AjPTable identifiers)
7289 {
7290     AjBool result = AJTRUE;
7291 
7292     AjPStr ensembltype = NULL;
7293     AjPStr extratype   = NULL;
7294 
7295     if (!dbea)
7296         return ajFalse;
7297 
7298     if (!dbname)
7299         return ajFalse;
7300 
7301     if (!identifiers)
7302         return ajFalse;
7303 
7304     ensembltype = ajStrNewC("Translation");
7305 
7306     extratype = ajStrNewC("gene");
7307 
7308     if (!databaseentryadaptorRetrieveAllIdentifiersByExternaldatabasename(
7309             dbea,
7310             dbname,
7311             ensembltype,
7312             extratype,
7313             identifiers))
7314         result = ajFalse;
7315 
7316     ajStrAssignC(&ensembltype, "Transcript");
7317 
7318     if (!databaseentryadaptorRetrieveAllIdentifiersByExternaldatabasename(
7319             dbea,
7320             dbname,
7321             ensembltype,
7322             extratype,
7323             identifiers))
7324         result = ajFalse;
7325 
7326     ajStrAssignC(&ensembltype, "Gene");
7327 
7328     if (!databaseentryadaptorRetrieveAllIdentifiersByExternaldatabasename(
7329             dbea,
7330             dbname,
7331             ensembltype,
7332             (AjPStr) NULL,
7333             identifiers))
7334         result = ajFalse;
7335 
7336     ajStrDel(&ensembltype);
7337     ajStrDel(&extratype);
7338 
7339     return result;
7340 }
7341 
7342 
7343 
7344 
7345 /* @func ensDatabaseentryadaptorRetrieveAllGeneidentifiersByExternalname ******
7346 **
7347 ** Retrieve SQL database-internal Ensembl Gene identifier objects via an
7348 ** Ensembl Database Entry name.
7349 **
7350 ** The caller is responsible for deleting the AJAX unsigned integer objects
7351 ** before deleting the AJAX Table.
7352 **
7353 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::list_gene_ids_by_extids
7354 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
7355 ** @param [r] name [const AjPStr] Ensembl Database Entry name
7356 ** @param [rN] dbname [const AjPStr] Ensembl External Database name
7357 ** @param [r] override [AjBool] Override optimisation of '_' SQL any
7358 ** @param [u] identifiers [AjPTable]
7359 ** AJAX Table of
7360 ** AJAX unsigned integer (Ensembl Gene identifier) key data and
7361 ** generic value data
7362 **
7363 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
7364 **
7365 ** @release 6.4.0
7366 ** @@
7367 ******************************************************************************/
7368 
ensDatabaseentryadaptorRetrieveAllGeneidentifiersByExternalname(EnsPDatabaseentryadaptor dbea,const AjPStr name,const AjPStr dbname,AjBool override,AjPTable identifiers)7369 AjBool ensDatabaseentryadaptorRetrieveAllGeneidentifiersByExternalname(
7370     EnsPDatabaseentryadaptor dbea,
7371     const AjPStr name,
7372     const AjPStr dbname,
7373     AjBool override,
7374     AjPTable identifiers)
7375 {
7376     AjBool result = AJTRUE;
7377 
7378     AjPStr ensembltype = NULL;
7379     AjPStr extratype   = NULL;
7380 
7381     if (!dbea)
7382         return ajFalse;
7383 
7384     if (!name)
7385         return ajFalse;
7386 
7387     if (!identifiers)
7388         return ajFalse;
7389 
7390     ensembltype = ajStrNewC("Translation");
7391 
7392     extratype = ajStrNewC("gene");
7393 
7394     if (!databaseentryadaptorRetrieveAllIdentifiersByExternalname(
7395             dbea,
7396             name,
7397             ensembltype,
7398             extratype,
7399             dbname,
7400             override,
7401             identifiers))
7402         result = ajFalse;
7403 
7404     ajStrAssignC(&ensembltype, "Transcript");
7405 
7406     if (!databaseentryadaptorRetrieveAllIdentifiersByExternalname(
7407             dbea,
7408             name,
7409             ensembltype,
7410             extratype,
7411             dbname,
7412             override,
7413             identifiers))
7414         result = ajFalse;
7415 
7416     ajStrAssignC(&ensembltype, "Gene");
7417 
7418     if (!databaseentryadaptorRetrieveAllIdentifiersByExternalname(
7419             dbea,
7420             name,
7421             ensembltype,
7422             (AjPStr) NULL,
7423             dbname,
7424             override,
7425             identifiers))
7426         result = ajFalse;
7427 
7428     ajStrDel(&ensembltype);
7429     ajStrDel(&extratype);
7430 
7431     return result;
7432 }
7433 
7434 
7435 
7436 
7437 /* @func ensDatabaseentryadaptorRetrieveAllTranscriptidentifiersByExternaldatabasename
7438 **
7439 ** Retrieve SQL database-internal Ensembl Transcript identifier objects via an
7440 ** Ensembl External Database name.
7441 **
7442 ** The caller is responsible for deleting the AJAX unsigned integer objects
7443 ** before deleting the AJAX Table.
7444 **
7445 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::
7446 **     list_transcript_ids_by_external_db_id
7447 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
7448 ** @param [r] dbname [const AjPStr] Ensembl External Database name
7449 ** @param [u] identifiers [AjPTable]
7450 ** AJAX Table of
7451 ** AJAX unsigned integer (Ensembl Transcript identifier) key data
7452 ** and generic value data
7453 **
7454 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
7455 **
7456 ** @release 6.4.0
7457 ** @@
7458 ******************************************************************************/
7459 
ensDatabaseentryadaptorRetrieveAllTranscriptidentifiersByExternaldatabasename(EnsPDatabaseentryadaptor dbea,const AjPStr dbname,AjPTable identifiers)7460 AjBool ensDatabaseentryadaptorRetrieveAllTranscriptidentifiersByExternaldatabasename(
7461     EnsPDatabaseentryadaptor dbea,
7462     const AjPStr dbname,
7463     AjPTable identifiers)
7464 {
7465     AjBool result = AJTRUE;
7466 
7467     AjPStr ensembltype = NULL;
7468     AjPStr extratype   = NULL;
7469 
7470     if (!dbea)
7471         return ajFalse;
7472 
7473     if (!dbname)
7474         return ajFalse;
7475 
7476     if (!identifiers)
7477         return ajFalse;
7478 
7479     ensembltype = ajStrNewC("Translation");
7480 
7481     extratype = ajStrNewC("transcript");
7482 
7483     if (!databaseentryadaptorRetrieveAllIdentifiersByExternaldatabasename(
7484             dbea,
7485             dbname,
7486             ensembltype,
7487             extratype,
7488             identifiers))
7489         result = ajFalse;
7490 
7491     ajStrAssignC(&ensembltype, "Transcript");
7492 
7493     if (!databaseentryadaptorRetrieveAllIdentifiersByExternaldatabasename(
7494             dbea,
7495             dbname,
7496             ensembltype,
7497             extratype,
7498             identifiers))
7499         result = ajFalse;
7500 
7501     ajStrDel(&ensembltype);
7502     ajStrDel(&extratype);
7503 
7504     return result;
7505 }
7506 
7507 
7508 
7509 
7510 /* @func ensDatabaseentryadaptorRetrieveAllTranscriptidentifiersByExternalname*
7511 **
7512 ** Retrieve SQL database-internal Ensembl Transcript identifier objects via an
7513 ** Ensembl Database Entry name.
7514 **
7515 ** The caller is responsible for deleting the AJAX unsigned integer objects
7516 ** before deleting the AJAX Table.
7517 **
7518 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::list_transcript_ids_by_extids
7519 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
7520 ** @param [r] name [const AjPStr] Ensembl Database Entry name
7521 ** @param [rN] dbname [const AjPStr] Ensembl External Database name
7522 ** @param [r] override [AjBool] Override optimisation of '_' SQL any
7523 ** @param [u] identifiers [AjPTable]
7524 ** AJAX Table of
7525 ** AJAX unsigned integer (Ensembl Transcript identifier) key data
7526 ** and generic value data
7527 **
7528 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
7529 **
7530 ** @release 6.4.0
7531 ** @@
7532 ******************************************************************************/
7533 
ensDatabaseentryadaptorRetrieveAllTranscriptidentifiersByExternalname(EnsPDatabaseentryadaptor dbea,const AjPStr name,const AjPStr dbname,AjBool override,AjPTable identifiers)7534 AjBool ensDatabaseentryadaptorRetrieveAllTranscriptidentifiersByExternalname(
7535     EnsPDatabaseentryadaptor dbea,
7536     const AjPStr name,
7537     const AjPStr dbname,
7538     AjBool override,
7539     AjPTable identifiers)
7540 {
7541     AjBool result = AJTRUE;
7542 
7543     AjPStr ensembltype = NULL;
7544     AjPStr extratype   = NULL;
7545 
7546     if (!dbea)
7547         return ajFalse;
7548 
7549     if (!name)
7550         return ajFalse;
7551 
7552     if (!identifiers)
7553         return ajFalse;
7554 
7555     ensembltype = ajStrNewC("Translation");
7556 
7557     extratype = ajStrNewC("transcript");
7558 
7559     if (!databaseentryadaptorRetrieveAllIdentifiersByExternalname(
7560             dbea,
7561             name,
7562             ensembltype,
7563             extratype,
7564             dbname,
7565             override,
7566             identifiers))
7567         result = ajFalse;
7568 
7569     ajStrAssignC(&ensembltype, "Transcript");
7570 
7571     if (!databaseentryadaptorRetrieveAllIdentifiersByExternalname(
7572             dbea,
7573             name,
7574             ensembltype,
7575             (AjPStr) NULL,
7576             dbname,
7577             override,
7578             identifiers))
7579         result = ajFalse;
7580 
7581     ajStrDel(&ensembltype);
7582     ajStrDel(&extratype);
7583 
7584     return result;
7585 }
7586 
7587 
7588 
7589 
7590 /* @func ensDatabaseentryadaptorRetrieveAllTranslationidentifiersByExternaldatabasename
7591 **
7592 ** Retrieve SQL database-internal Ensembl Translation identifier objects via an
7593 ** Ensembl External Database name.
7594 **
7595 ** The caller is responsible for deleting the AJAX unsigned integer objects
7596 ** before deleting the AJAX Table.
7597 **
7598 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::
7599 **     list_translation_ids_by_external_db_id
7600 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
7601 ** @param [r] dbname [const AjPStr] Ensembl External Database name
7602 ** @param [u] identifiers [AjPTable]
7603 ** AJAX Table of
7604 ** AJAX unsigned integer (Ensembl Translation identifier) key data and
7605 ** generic value data
7606 **
7607 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
7608 **
7609 ** @release 6.4.0
7610 ** @@
7611 ******************************************************************************/
7612 
ensDatabaseentryadaptorRetrieveAllTranslationidentifiersByExternaldatabasename(EnsPDatabaseentryadaptor dbea,const AjPStr dbname,AjPTable identifiers)7613 AjBool ensDatabaseentryadaptorRetrieveAllTranslationidentifiersByExternaldatabasename(
7614     EnsPDatabaseentryadaptor dbea,
7615     const AjPStr dbname,
7616     AjPTable identifiers)
7617 {
7618     AjBool result = AJTRUE;
7619 
7620     AjPStr ensembltype = NULL;
7621     AjPStr extratype   = NULL;
7622 
7623     if (!dbea)
7624         return ajFalse;
7625 
7626     if (!dbname)
7627         return ajFalse;
7628 
7629     if (!identifiers)
7630         return ajFalse;
7631 
7632     ensembltype = ajStrNewC("Translation");
7633 
7634     if (!databaseentryadaptorRetrieveAllIdentifiersByExternaldatabasename(
7635             dbea,
7636             dbname,
7637             ensembltype,
7638             extratype,
7639             identifiers))
7640         result = ajFalse;
7641 
7642     ajStrDel(&ensembltype);
7643 
7644     return result;
7645 }
7646 
7647 
7648 
7649 
7650 /* @func ensDatabaseentryadaptorRetrieveAllTranslationidentifiersByExternalname
7651 **
7652 ** Retrieve SQL database-internal Ensembl Translation identifier objects via an
7653 ** Ensembl Database Entry name.
7654 **
7655 ** The caller is responsible for deleting the AJAX unsigned integer objects
7656 ** before deleting the AJAX Table.
7657 **
7658 ** @cc Bio::EnsEMBL::DBSQL::DBEntryAdaptor::list_translation_ids_by_extids
7659 ** @param [u] dbea [EnsPDatabaseentryadaptor] Ensembl Database Entry Adaptor
7660 ** @param [r] name [const AjPStr] Ensembl Database Entry name
7661 ** @param [rN] dbname [const AjPStr] Ensembl External Database name
7662 ** @param [r] override [AjBool] Override optimisation of '_' SQL any
7663 ** @param [u] identifiers [AjPTable]
7664 ** AJAX Table of
7665 ** AJAX unsigned integer (Ensembl Translation identifier) key data and
7666 ** generic value data
7667 **
7668 ** @return [AjBool] ajTrue upon sucess, ajFalse otherwise
7669 **
7670 ** @release 6.4.0
7671 ** @@
7672 ******************************************************************************/
7673 
ensDatabaseentryadaptorRetrieveAllTranslationidentifiersByExternalname(EnsPDatabaseentryadaptor dbea,const AjPStr name,const AjPStr dbname,AjBool override,AjPTable identifiers)7674 AjBool ensDatabaseentryadaptorRetrieveAllTranslationidentifiersByExternalname(
7675     EnsPDatabaseentryadaptor dbea,
7676     const AjPStr name,
7677     const AjPStr dbname,
7678     AjBool override,
7679     AjPTable identifiers)
7680 {
7681     AjBool result = AJTRUE;
7682 
7683     AjPStr ensembltype = NULL;
7684 
7685     if (!dbea)
7686         return ajFalse;
7687 
7688     if (!name)
7689         return ajFalse;
7690 
7691     if (!identifiers)
7692         return ajFalse;
7693 
7694     ensembltype = ajStrNewC("Translation");
7695 
7696     if (!databaseentryadaptorRetrieveAllIdentifiersByExternalname(
7697             dbea,
7698             name,
7699             ensembltype,
7700             (AjPStr) NULL,
7701             dbname,
7702             override,
7703             identifiers))
7704         result = ajFalse;
7705 
7706     ajStrDel(&ensembltype);
7707 
7708     return result;
7709 }
7710