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