1 /* @source ensgvallele ********************************************************
2 **
3 ** Ensembl Genetic Variation Allele functions
4 **
5 ** @author Copyright (C) 1999 Ensembl Developers
6 ** @author Copyright (C) 2006 Michael K. Schuster
7 ** @version $Revision: 1.23 $
8 ** @modified 2009 by Alan Bleasby for incorporation into EMBOSS core
9 ** @modified $Date: 2013/02/17 13:02:10 $ 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 "ensgvallele.h"
34 #include "ensgvbaseadaptor.h"
35 #include "ensgvdatabaseadaptor.h"
36 #include "ensgvpopulation.h"
37 #include "ensgvvariation.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 gvalleleadaptorKTablenames ************************************
68 **
69 ** Array of Ensembl Genetic Variation Allele Adaptor SQL table names
70 **
71 ******************************************************************************/
72 
73 static const char *gvalleleadaptorKTablenames[] =
74 {
75     "allele",
76     "allele_code",
77     (const char *) NULL
78 };
79 
80 
81 
82 
83 /* @conststatic gvalleleadaptorKColumnnames ***********************************
84 **
85 ** Array of Ensembl Genetic Variation Allele Adaptor SQL column names
86 **
87 ******************************************************************************/
88 
89 static const char *gvalleleadaptorKColumnnames[] =
90 {
91     "allele.allele_id",
92     "allele.variation_id",
93     "allele.subsnp_id",
94     "allele_code.allele",
95     "allele.frequency",
96     "allele.sample_id",
97     "allele.count",
98     (const char *) NULL
99 };
100 
101 
102 
103 
104 /* @conststatic gvalleleadaptorKLeftjoins *************************************
105 **
106 ** Array of Ensembl Genetic Variation Allele Adaptor SQL LEFT JOIN conditions
107 **
108 ******************************************************************************/
109 
110 static const EnsOBaseadaptorLeftjoin gvalleleadaptorKLeftjoins[] =
111 {
112     {"failed_allele", "allele.allele_id = failed_allele.allele_id"},
113     {(const char *) NULL, (const char *) NULL}
114 };
115 
116 
117 
118 
119 /* @conststatic gvalleleadaptorKDefaultcondition ******************************
120 **
121 ** Ensembl Genetic Variation Allele Adaptor SQL SELECT default condition
122 **
123 ******************************************************************************/
124 
125 static const char *gvalleleadaptorKDefaultcondition =
126     "allele.allele_code_id = allele_code.allele_code_id";
127 
128 
129 
130 
131 /* @conststatic gvalleleadaptorfailedvariationKTablenames *********************
132 **
133 ** Array of Ensembl Genetic Variation Allele Adaptor SQL table names
134 **
135 ******************************************************************************/
136 
137 static const char *gvalleleadaptorfailedvariationKTablenames[] =
138 {
139     "allele",
140     "allele_code",
141     "failed_allele",
142     (const char *) NULL
143 };
144 
145 
146 
147 
148 /* ========================================================================= */
149 /* =========================== private variables =========================== */
150 /* ========================================================================= */
151 
152 
153 
154 
155 /* ========================================================================= */
156 /* =========================== private functions =========================== */
157 /* ========================================================================= */
158 
159 static AjBool gvalleleadaptorFetchAllbyStatement(
160     EnsPBaseadaptor ba,
161     const AjPStr statement,
162     EnsPAssemblymapper am,
163     EnsPSlice slice,
164     AjPList gvas);
165 
166 
167 
168 
169 /* ========================================================================= */
170 /* ======================= All functions by section ======================== */
171 /* ========================================================================= */
172 
173 
174 
175 
176 /* @filesection ensgvallele ***************************************************
177 **
178 ** @nam1rule ens Function belongs to the Ensembl library
179 **
180 ******************************************************************************/
181 
182 
183 
184 
185 /* @datasection [EnsPGvallele] Ensembl Genetic Variation Allele ***************
186 **
187 ** @nam2rule Gvallele Functions for manipulating
188 ** Ensembl Genetic Variation Allele objects
189 **
190 ** @cc Bio::EnsEMBL::Variation::Allele
191 ** @cc CVS Revision: 1.20
192 ** @cc CVS Tag: branch-ensembl-68
193 **
194 ** @cc Bio::EnsEMBL::Variation::Failable
195 ** @cc CVS Revision: 1.2
196 ** @cc CVS Tag: branch-ensembl-68
197 **
198 ** TODO: Lazy loading of Ensembl Genetic Variation Population objects and
199 ** Ensembl Genetic Variation Variation objects is not implemented yet.
200 ** In the Perl implementation Variation objects have references to Allele
201 ** objects and vice versa so to avoid circular references, the Allele object
202 ** weakens its link to the Variation object.
203 ******************************************************************************/
204 
205 
206 
207 
208 /* @section constructors ******************************************************
209 **
210 ** All constructors return a new Ensembl Genetic Variation Allele by pointer.
211 ** It is the responsibility of the user to first destroy any previous
212 ** Genetic Variation Allele. The target pointer does not need to be
213 ** initialised to NULL, but it is good programming practice to do so anyway.
214 **
215 ** @fdata [EnsPGvallele]
216 **
217 ** @nam3rule New Constructor
218 ** @nam4rule Cpy Constructor with existing object
219 ** @nam4rule Ini Constructor with initial values
220 ** @nam4rule Ref Constructor by incrementing the reference counter
221 **
222 ** @argrule Cpy gva [const EnsPGvallele] Ensembl Genetic Variation Allele
223 ** @argrule Ini gvaa [EnsPGvalleleadaptor] Ensembl Genetic Variation
224 ** @argrule Ini identifier [ajuint] SQL database-internal identifier
225 ** @argrule Ini gvp [EnsPGvpopulation] Ensembl Genetic Variation Population
226 ** @argrule Ini allele [AjPStr] Allele
227 ** @argrule Ini frequency [float] Frequency
228 ** @argrule Ini subidentifier [ajuint] Subidentifier
229 ** @argrule Ini counter [ajuint] Counter
230 ** @argrule Ini gvvid [ajuint] Ensembl Genetic Variation Variation identifier
231 ** @argrule Ref gva [EnsPGvallele] Ensembl Genetic Variation Allele
232 **
233 ** @valrule * [EnsPGvallele] Ensembl Genetic Variation Allele or NULL
234 **
235 ** @fcategory new
236 ******************************************************************************/
237 
238 
239 
240 
241 /* @func ensGvalleleNewCpy ****************************************************
242 **
243 ** Object-based constructor function, which returns an independent object.
244 **
245 ** @param [r] gva [const EnsPGvallele] Ensembl Genetic Variation Allele
246 **
247 ** @return [EnsPGvallele] Ensembl Genetic Variation Allele or NULL
248 **
249 ** @release 6.4.0
250 ** @@
251 ******************************************************************************/
252 
ensGvalleleNewCpy(const EnsPGvallele gva)253 EnsPGvallele ensGvalleleNewCpy(const EnsPGvallele gva)
254 {
255     AjIList iter = NULL;
256 
257     AjPStr description = NULL;
258 
259     EnsPGvallele pthis = NULL;
260 
261     if (!gva)
262         return NULL;
263 
264     AJNEW0(pthis);
265 
266     pthis->Use = 1U;
267 
268     pthis->Identifier = gva->Identifier;
269 
270     pthis->Adaptor = gva->Adaptor;
271 
272     pthis->Gvpopulation = ensGvpopulationNewRef(gva->Gvpopulation);
273 
274     if (gva->Allele)
275         pthis->Allele = ajStrNewRef(gva->Allele);
276 
277     if (gva->Subhandle)
278         pthis->Subhandle = ajStrNewRef(gva->Subhandle);
279 
280     /* NOTE: Copy the AJAX List of AJAX String (failed description) objects. */
281 
282     if (gva->Faileddescriptions)
283     {
284         pthis->Faileddescriptions = ajListstrNew();
285 
286         iter = ajListIterNew(gva->Faileddescriptions);
287 
288         while (!ajListIterDone(iter))
289         {
290             description = ajListstrIterGet(iter);
291 
292             if (description)
293                 ajListstrPushAppend(pthis->Faileddescriptions,
294                                     ajStrNewS(description));
295         }
296 
297         ajListIterDel(&iter);
298     }
299 
300     pthis->Counter = gva->Counter;
301 
302     pthis->Gvvariationidentifier = gva->Gvvariationidentifier;
303 
304     pthis->Subidentifier = gva->Subidentifier;
305 
306     pthis->Frequency = gva->Frequency;
307 
308     return pthis;
309 }
310 
311 
312 
313 
314 /* @func ensGvalleleNewIni ****************************************************
315 **
316 ** Constructor for an Ensembl Genetic Variation Allele with initial values.
317 **
318 ** @cc Bio::EnsEMBL::Storable::new
319 ** @param [u] gvaa [EnsPGvalleleadaptor] Ensembl Genetic Variation
320 **                                       Allele Adaptor
321 ** @param [r] identifier [ajuint] SQL database-internal identifier
322 ** @cc Bio::EnsEMBL::Variation::Allele::new
323 ** @param [u] gvp [EnsPGvpopulation] Ensembl Genetic Variation Population
324 ** @param [u] allele [AjPStr] Allele
325 ** @param [r] frequency [float] Frequency
326 ** @param [r] subidentifier [ajuint] Subidentifier
327 ** @param [r] counter [ajuint] Counter
328 ** @param [r] gvvid [ajuint] Ensembl Genetic Variation Variation identifier
329 **
330 ** @return [EnsPGvallele] Ensembl Genetic Variation Allele or NULL
331 **
332 ** @release 6.4.0
333 ** @@
334 ******************************************************************************/
335 
ensGvalleleNewIni(EnsPGvalleleadaptor gvaa,ajuint identifier,EnsPGvpopulation gvp,AjPStr allele,float frequency,ajuint subidentifier,ajuint counter,ajuint gvvid)336 EnsPGvallele ensGvalleleNewIni(EnsPGvalleleadaptor gvaa,
337                                ajuint identifier,
338                                EnsPGvpopulation gvp,
339                                AjPStr allele,
340                                float frequency,
341                                ajuint subidentifier,
342                                ajuint counter,
343                                ajuint gvvid)
344 {
345     EnsPGvallele gva = NULL;
346 
347     if (!gvp)
348         return NULL;
349 
350     if (!allele)
351         return NULL;
352 
353     AJNEW0(gva);
354 
355     gva->Use = 1U;
356 
357     gva->Identifier = identifier;
358 
359     gva->Adaptor = gvaa;
360 
361     gva->Gvpopulation = ensGvpopulationNewRef(gvp);
362 
363     if (allele)
364         gva->Allele = ajStrNewS(allele);
365 
366     gva->Subidentifier = subidentifier;
367 
368     gva->Counter = counter;
369 
370     gva->Gvvariationidentifier = gvvid;
371 
372     gva->Frequency = frequency;
373 
374     return gva;
375 }
376 
377 
378 
379 
380 /* @func ensGvalleleNewRef ****************************************************
381 **
382 ** Ensembl Object referencing function, which returns a pointer to the
383 ** Ensembl Object passed in and increases its reference count.
384 **
385 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
386 **
387 ** @return [EnsPGvallele] Ensembl Genetic Variation Allele or NULL
388 **
389 ** @release 6.2.0
390 ** @@
391 ******************************************************************************/
392 
ensGvalleleNewRef(EnsPGvallele gva)393 EnsPGvallele ensGvalleleNewRef(EnsPGvallele gva)
394 {
395     if (!gva)
396         return NULL;
397 
398     gva->Use++;
399 
400     return gva;
401 }
402 
403 
404 
405 
406 /* @section destructors *******************************************************
407 **
408 ** Destruction destroys all internal data structures and frees the memory
409 ** allocated for an Ensembl Genetic Variation Allele object.
410 **
411 ** @fdata [EnsPGvallele]
412 **
413 ** @nam3rule Del Destroy (free) an Ensembl Genetic Variation Allele
414 **
415 ** @argrule * Pgva [EnsPGvallele*] Ensembl Genetic Variation Allele address
416 **
417 ** @valrule * [void]
418 **
419 ** @fcategory delete
420 ******************************************************************************/
421 
422 
423 
424 
425 /* @func ensGvalleleDel *******************************************************
426 **
427 ** Default destructor for an Ensembl Genetic Variation Allele.
428 **
429 ** @param [d] Pgva [EnsPGvallele*] Ensembl Genetic Variation Allele address
430 **
431 ** @return [void]
432 **
433 ** @release 6.2.0
434 ** @@
435 ******************************************************************************/
436 
ensGvalleleDel(EnsPGvallele * Pgva)437 void ensGvalleleDel(EnsPGvallele *Pgva)
438 {
439     EnsPGvallele pthis = NULL;
440 
441     if (!Pgva)
442         return;
443 
444 #if defined(AJ_DEBUG) && AJ_DEBUG >= 1
445     if (ajDebugTest("ensGvalleleDel"))
446     {
447         ajDebug("ensGvalleleDel\n"
448                 "  *Pgva %p\n",
449                 *Pgva);
450 
451         ensGvalleleTrace(*Pgva, 1);
452     }
453 #endif /* defined(AJ_DEBUG) && AJ_DEBUG >= 1 */
454 
455     if (!(pthis = *Pgva) || --pthis->Use)
456     {
457         *Pgva = NULL;
458 
459         return;
460     }
461 
462     ensGvpopulationDel(&pthis->Gvpopulation);
463 
464     ajStrDel(&pthis->Allele);
465 
466     ajStrDel(&pthis->Subhandle);
467 
468     ajListstrFreeData(&pthis->Faileddescriptions);
469 
470     ajMemFree((void **) Pgva);
471 
472     return;
473 }
474 
475 
476 
477 
478 /* @section member retrieval **************************************************
479 **
480 ** Functions for returning members of an
481 ** Ensembl Genetic Variation Allele object.
482 **
483 ** @fdata [EnsPGvallele]
484 **
485 ** @nam3rule Get Return Genetic Variation Allele attribute(s)
486 ** @nam4rule Adaptor Return the Ensembl Genetic Variation Allele Adaptor
487 ** @nam4rule Allele Return the allele
488 ** @nam4rule Counter Return the counter
489 ** @nam4rule Frequency Return the frequency
490 ** @nam4rule Gvpopulation Return the Ensembl Genetic Variation Population
491 ** @nam4rule Gvvariationidentifier
492 ** Return the Ensembl Genetic Variation Variation identifier
493 ** @nam4rule Identifier Return the SQL database-internal identifier
494 ** @nam4rule Subidentifier Return the subidentifier
495 **
496 ** @argrule * gva [const EnsPGvallele] Genetic Variation Allele
497 **
498 ** @valrule Adaptor [EnsPGvalleleadaptor] Ensembl Genetic Variation
499 **                                        Allele Adaptor or NULL
500 ** @valrule Allele [AjPStr] Allele or NULL
501 ** @valrule Counter [ajuint] Counter or 0U
502 ** @valrule Frequency [float] Frequency or 0.0F
503 ** @valrule Gvpopulation [EnsPGvpopulation]
504 ** Ensembl Genetic Variation Population or NULL
505 ** @valrule Gvvariationidentifier [ajuint]
506 ** Ensembl Genetic Variation Variation identifier or 0U
507 ** @valrule Identifier [ajuint] SQL database-internal identifier or 0U
508 ** @valrule Subidentifier [ajuint] Subidentifier or 0U
509 **
510 ** @fcategory use
511 ******************************************************************************/
512 
513 
514 
515 
516 /* @func ensGvalleleGetAdaptor ************************************************
517 **
518 ** Get the Ensembl Genetic Variation Allele Adaptor member of an
519 ** Ensembl Genetic Variation Allele.
520 **
521 ** @param [r] gva [const EnsPGvallele] Ensembl Genetic Variation Allele
522 **
523 ** @return [EnsPGvalleleadaptor] Ensembl Genetic Variation Allele Adaptor
524 ** or NULL
525 **
526 ** @release 6.2.0
527 ** @@
528 ******************************************************************************/
529 
ensGvalleleGetAdaptor(const EnsPGvallele gva)530 EnsPGvalleleadaptor ensGvalleleGetAdaptor(const EnsPGvallele gva)
531 {
532     return (gva) ? gva->Adaptor : NULL;
533 }
534 
535 
536 
537 
538 /* @func ensGvalleleGetAllele *************************************************
539 **
540 ** Get the allele member of an Ensembl Genetic Variation Allele.
541 **
542 ** @param [r] gva [const EnsPGvallele] Ensembl Genetic Variation Allele
543 **
544 ** @return [AjPStr] Allele or NULL
545 **
546 ** @release 6.2.0
547 ** @@
548 ******************************************************************************/
549 
ensGvalleleGetAllele(const EnsPGvallele gva)550 AjPStr ensGvalleleGetAllele(const EnsPGvallele gva)
551 {
552     return (gva) ? gva->Allele : NULL;
553 }
554 
555 
556 
557 
558 /* @func ensGvalleleGetCounter ************************************************
559 **
560 ** Get the counter member of an Ensembl Genetic Variation Allele.
561 **
562 ** @param [r] gva [const EnsPGvallele] Ensembl Genetic Variation Allele
563 **
564 ** @return [ajuint] Counter or 0U
565 **
566 ** @release 6.4.0
567 ** @@
568 ******************************************************************************/
569 
ensGvalleleGetCounter(const EnsPGvallele gva)570 ajuint ensGvalleleGetCounter(const EnsPGvallele gva)
571 {
572     return (gva) ? gva->Counter : 0U;
573 }
574 
575 
576 
577 
578 /* @func ensGvalleleGetFrequency **********************************************
579 **
580 ** Get the frequency member of an Ensembl Genetic Variation Allele.
581 **
582 ** @param [r] gva [const EnsPGvallele] Ensembl Genetic Variation Allele
583 **
584 ** @return [float] Frequency or 0.0F
585 **
586 ** @release 6.2.0
587 ** @@
588 ******************************************************************************/
589 
ensGvalleleGetFrequency(const EnsPGvallele gva)590 float ensGvalleleGetFrequency(const EnsPGvallele gva)
591 {
592     return (gva) ? gva->Frequency : 0.0F;
593 }
594 
595 
596 
597 
598 /* @func ensGvalleleGetGvpopulation *******************************************
599 **
600 ** Get the Ensembl Genetic Variation Population member of an
601 ** Ensembl Genetic Variation Allele.
602 **
603 ** @param [r] gva [const EnsPGvallele] Ensembl Genetic Variation Allele
604 **
605 ** @return [EnsPGvpopulation] Ensembl Genetic Variation Population or NULL
606 **
607 ** @release 6.4.0
608 ** @@
609 ******************************************************************************/
610 
ensGvalleleGetGvpopulation(const EnsPGvallele gva)611 EnsPGvpopulation ensGvalleleGetGvpopulation(const EnsPGvallele gva)
612 {
613     return (gva) ? gva->Gvpopulation : NULL;
614 }
615 
616 
617 
618 
619 /* @func ensGvalleleGetGvvariationidentifier **********************************
620 **
621 ** Get the Ensembl Genetic Variation Variation identifier member of an
622 ** Ensembl Genetic Variation Allele.
623 **
624 ** @param [r] gva [const EnsPGvallele] Ensembl Genetic Variation Allele
625 **
626 ** @return [ajuint] Ensembl Genetic Variation Variation identifier or 0U
627 **
628 ** @release 6.4.0
629 ** @@
630 ******************************************************************************/
631 
ensGvalleleGetGvvariationidentifier(const EnsPGvallele gva)632 ajuint ensGvalleleGetGvvariationidentifier(const EnsPGvallele gva)
633 {
634     return (gva) ? gva->Gvvariationidentifier : 0U;
635 }
636 
637 
638 
639 
640 /* @func ensGvalleleGetIdentifier *********************************************
641 **
642 ** Get the SQL database-internal identifier member of an
643 ** Ensembl Genetic Variation Allele.
644 **
645 ** @param [r] gva [const EnsPGvallele] Ensembl Genetic Variation Allele
646 **
647 ** @return [ajuint] SQL database-internal identifier or 0U
648 **
649 ** @release 6.2.0
650 ** @@
651 ******************************************************************************/
652 
ensGvalleleGetIdentifier(const EnsPGvallele gva)653 ajuint ensGvalleleGetIdentifier(const EnsPGvallele gva)
654 {
655     return (gva) ? gva->Identifier : 0U;
656 }
657 
658 
659 
660 
661 /* @func ensGvalleleGetSubidentifier ******************************************
662 **
663 ** Get the subidentifier member of an Ensembl Genetic Variation Allele.
664 **
665 ** @param [r] gva [const EnsPGvallele] Ensembl Genetic Variation Allele
666 **
667 ** @return [ajuint] Subidentifier or 0U
668 **
669 ** @release 6.4.0
670 ** @@
671 ******************************************************************************/
672 
ensGvalleleGetSubidentifier(const EnsPGvallele gva)673 ajuint ensGvalleleGetSubidentifier(const EnsPGvallele gva)
674 {
675     return (gva) ? gva->Subidentifier : 0U;
676 }
677 
678 
679 
680 
681 /* @section load on demand ****************************************************
682 **
683 ** Functions for returning members of an Ensembl Genetic Variation Allele
684 ** object, which may need loading from an Ensembl SQL database on demand.
685 **
686 ** @fdata [EnsPGvallele]
687 **
688 ** @nam3rule Load Return Ensembl Genetic Variation Allele attribute(s)
689 ** loaded on demand
690 ** @nam4rule All Return all Ensembl Genetic Variation Allele attribute(s)
691 ** loaded on demand
692 ** @nam5rule Faileddescriptions Load all failed descriptions
693 ** @nam4rule Subhandle Return the subhandle
694 **
695 ** @argrule * gva [EnsPGvallele] Ensembl Genetic Variation Allele
696 **
697 ** @valrule Faileddescriptions [const AjPList]
698 ** AJAX List of AJAX String (failed description) objects or NULL
699 ** @valrule Subhandle [AjPStr] Subhandle or NULL
700 **
701 ** @fcategory use
702 ******************************************************************************/
703 
704 
705 
706 
707 /* @func ensGvalleleLoadAllFaileddescriptions *********************************
708 **
709 ** Load all failed descriptions of an Ensembl Genetic Variation Allele.
710 **
711 ** This is not a simple accessor function, it will fetch the Ensembl Genetic
712 ** Variation Allele failed descriptions from the Ensembl Genetic Variation
713 ** database in case the AJAX List is not defined.
714 **
715 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
716 **
717 ** @return [const AjPList]
718 ** AJAX List of AJAX String (failed description) objects or NULL
719 **
720 ** @release 6.4.0
721 ** @@
722 ******************************************************************************/
723 
ensGvalleleLoadAllFaileddescriptions(EnsPGvallele gva)724 const AjPList ensGvalleleLoadAllFaileddescriptions(EnsPGvallele gva)
725 {
726     if (!gva)
727         return NULL;
728 
729     if (gva->Faileddescriptions)
730         return gva->Faileddescriptions;
731 
732     if (!gva->Adaptor)
733     {
734         ajDebug("ensGvalleleLoadAllFaileddescriptions cannot retrieve "
735                 "AJAX String (failed description) objects for an "
736                 "Ensembl Genetic Variation Allele whithout an "
737                 "Ensembl Genetic Variation Allele Adaptor.\n");
738 
739         return NULL;
740     }
741 
742     gva->Faileddescriptions = ajListstrNew();
743 
744     ensGvalleleadaptorRetrieveAllFaileddescriptions(
745         gva->Adaptor,
746         gva,
747         gva->Faileddescriptions);
748 
749     return gva->Faileddescriptions;
750 }
751 
752 
753 
754 
755 /* @func ensGvalleleLoadSubhandle *********************************************
756 **
757 ** Get the subhandle member of an Ensembl Genetic Variation Allele.
758 **
759 ** This is not a simple accessor function, it will fetch the Ensembl Genetic
760 ** Variation Allele subhandle from the Ensembl Genetic Variation database
761 ** in case the AJAX String is not defined.
762 **
763 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
764 **
765 ** @return [AjPStr] Subhandle or NULL
766 **
767 ** @release 6.4.0
768 ** @@
769 ******************************************************************************/
770 
ensGvalleleLoadSubhandle(EnsPGvallele gva)771 AjPStr ensGvalleleLoadSubhandle(EnsPGvallele gva)
772 {
773     if (!gva)
774         return NULL;
775 
776     if (gva->Subhandle)
777         return gva->Subhandle;
778 
779     if (!gva->Adaptor)
780     {
781         ajDebug("ensGvalleleLoadSubhandle cannot fetch a subhandle "
782                 "from the database for an Ensembl Genetic Variation Allele "
783                 "whithout an Ensembl Genetic Variation Allele Adaptor.\n");
784 
785         return gva->Subhandle;
786     }
787 
788     gva->Subhandle = ajStrNew();
789 
790     ensGvalleleadaptorRetrieveSubhandle(
791         gva->Adaptor,
792         gva,
793         &gva->Subhandle);
794 
795     return gva->Subhandle;
796 }
797 
798 
799 
800 
801 /* @section member assignment *************************************************
802 **
803 ** Functions for assigning members of an
804 ** Ensembl Genetic Variation Allele object.
805 **
806 ** @fdata [EnsPGvallele]
807 **
808 ** @nam3rule Set Set one member of a Genetic Variation Allele
809 ** @nam4rule Adaptor Set the Ensembl Genetic Variation Allele Adaptor
810 ** @nam4rule Allele Set the allele
811 ** @nam4rule Counter Set the counter
812 ** @nam4rule Frequency Set the frequency
813 ** @nam4rule Gvpopulation Set the Ensembl Genetic Variation Population
814 ** @nam4rule Gvvariationidentifier
815 ** Set the Ensembl Genetic Variation Variation identifier
816 ** @nam4rule Identifier Set the SQL database-internal identifier
817 ** @nam4rule Subhandle Set the subhandle
818 ** @nam4rule Subidentifier Set the subidentifier
819 **
820 ** @argrule * gva [EnsPGvallele] Ensembl Genetic Variation Allele object
821 **
822 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
823 ** @argrule Adaptor gvaa [EnsPGvalleleadaptor] Ensembl Genetic Variation
824 ** @argrule Allele allele [AjPStr] Allele
825 ** @argrule Counter counter [ajuint] Counter
826 ** @argrule Frequency frequency [float] Frequency
827 ** @argrule Gvpopulation gvp [EnsPGvpopulation]
828 ** Ensembl Genetic Variation Population
829 ** @argrule Gvvariationidentifier gvvid [ajuint]
830 ** Ensembl Genetic Variation Variation identifier
831 ** @argrule Identifier identifier [ajuint] SQL database-internal identifier
832 ** @argrule Subhandle subhandle [AjPStr] Subhandle
833 ** @argrule Subidentifier subidentifier [ajuint] Subidentifier
834 **
835 ** @fcategory modify
836 ******************************************************************************/
837 
838 
839 
840 
841 /* @func ensGvalleleSetAdaptor ************************************************
842 **
843 ** Set the Ensembl Genetic Variation Allele Adaptor member of an
844 ** Ensembl Genetic Variation Allele.
845 **
846 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
847 ** @param [u] gvaa [EnsPGvalleleadaptor] Ensembl Genetic Variation
848 **                                       Allele Adaptor
849 **
850 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
851 **
852 ** @release 6.2.0
853 ** @@
854 ******************************************************************************/
855 
ensGvalleleSetAdaptor(EnsPGvallele gva,EnsPGvalleleadaptor gvaa)856 AjBool ensGvalleleSetAdaptor(EnsPGvallele gva, EnsPGvalleleadaptor gvaa)
857 {
858     if (!gva)
859         return ajFalse;
860 
861     gva->Adaptor = gvaa;
862 
863     return ajTrue;
864 }
865 
866 
867 
868 
869 /* @func ensGvalleleSetAllele *************************************************
870 **
871 ** Set the allele member of an Ensembl Genetic Variation Allele.
872 **
873 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
874 ** @param [u] allele [AjPStr] Allele
875 **
876 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
877 **
878 ** @release 6.2.0
879 ** @@
880 ******************************************************************************/
881 
ensGvalleleSetAllele(EnsPGvallele gva,AjPStr allele)882 AjBool ensGvalleleSetAllele(EnsPGvallele gva, AjPStr allele)
883 {
884     if (!gva)
885         return ajFalse;
886 
887     ajStrDel(&gva->Allele);
888 
889     if (allele)
890         gva->Allele = ajStrNewRef(allele);
891 
892     return ajTrue;
893 }
894 
895 
896 
897 
898 /* @func ensGvalleleSetCounter ************************************************
899 **
900 ** Set the counter member of an Ensembl Genetic Variation Allele.
901 **
902 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
903 ** @param [r] counter [ajuint] Counter
904 **
905 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
906 **
907 ** @release 6.4.0
908 ** @@
909 ******************************************************************************/
910 
ensGvalleleSetCounter(EnsPGvallele gva,ajuint counter)911 AjBool ensGvalleleSetCounter(EnsPGvallele gva, ajuint counter)
912 {
913     if (!gva)
914         return ajFalse;
915 
916     gva->Counter = counter;
917 
918     return ajTrue;
919 }
920 
921 
922 
923 
924 /* @func ensGvalleleSetFrequency **********************************************
925 **
926 ** Set the frequency member of an Ensembl Genetic Variation Allele.
927 **
928 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
929 ** @param [r] frequency [float] Frequency
930 **
931 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
932 **
933 ** @release 6.2.0
934 ** @@
935 ******************************************************************************/
936 
ensGvalleleSetFrequency(EnsPGvallele gva,float frequency)937 AjBool ensGvalleleSetFrequency(EnsPGvallele gva, float frequency)
938 {
939     if (!gva)
940         return ajFalse;
941 
942     gva->Frequency = frequency;
943 
944     return ajTrue;
945 }
946 
947 
948 
949 
950 /* @func ensGvalleleSetGvpopulation *******************************************
951 **
952 ** Set the Ensembl Genetic Variation Population member of an
953 ** Ensembl Genetic Variation Allele.
954 **
955 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
956 ** @param [u] gvp [EnsPGvpopulation] Ensembl Genetic Variation Population
957 **
958 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
959 **
960 ** @release 6.4.0
961 ** @@
962 ******************************************************************************/
963 
ensGvalleleSetGvpopulation(EnsPGvallele gva,EnsPGvpopulation gvp)964 AjBool ensGvalleleSetGvpopulation(EnsPGvallele gva, EnsPGvpopulation gvp)
965 {
966     if (!gva)
967         return ajFalse;
968 
969     ensGvpopulationDel(&gva->Gvpopulation);
970 
971     gva->Gvpopulation = ensGvpopulationNewRef(gvp);
972 
973     return ajTrue;
974 }
975 
976 
977 
978 
979 /* @func ensGvalleleSetGvvariationidentifier **********************************
980 **
981 ** Set the Ensembl Genetic Variation Variation identifier member of an
982 ** Ensembl Genetic Variation Allele.
983 **
984 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
985 ** @param [r] gvvid [ajuint] Ensembl Genetic Variation Variation identifier
986 **
987 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
988 **
989 ** @release 6.4.0
990 ** @@
991 ******************************************************************************/
992 
ensGvalleleSetGvvariationidentifier(EnsPGvallele gva,ajuint gvvid)993 AjBool ensGvalleleSetGvvariationidentifier(EnsPGvallele gva, ajuint gvvid)
994 {
995     if (!gva)
996         return ajFalse;
997 
998     gva->Gvvariationidentifier = gvvid;
999 
1000     return ajTrue;
1001 }
1002 
1003 
1004 
1005 
1006 /* @func ensGvalleleSetIdentifier *********************************************
1007 **
1008 ** Set the SQL database-internal identifier member of an
1009 ** Ensembl Genetic Variation Allele.
1010 **
1011 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
1012 ** @param [r] identifier [ajuint] SQL database-internal identifier
1013 **
1014 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1015 **
1016 ** @release 6.2.0
1017 ** @@
1018 ******************************************************************************/
1019 
ensGvalleleSetIdentifier(EnsPGvallele gva,ajuint identifier)1020 AjBool ensGvalleleSetIdentifier(EnsPGvallele gva, ajuint identifier)
1021 {
1022     if (!gva)
1023         return ajFalse;
1024 
1025     gva->Identifier = identifier;
1026 
1027     return ajTrue;
1028 }
1029 
1030 
1031 
1032 
1033 /* @func ensGvalleleSetSubhandle **********************************************
1034 **
1035 ** Set the subhandle member of an Ensembl Genetic Variation Allele.
1036 **
1037 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
1038 ** @param [u] subhandle [AjPStr] Subhandle
1039 **
1040 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1041 **
1042 ** @release 6.4.0
1043 ** @@
1044 ******************************************************************************/
1045 
ensGvalleleSetSubhandle(EnsPGvallele gva,AjPStr subhandle)1046 AjBool ensGvalleleSetSubhandle(EnsPGvallele gva, AjPStr subhandle)
1047 {
1048     if (!gva)
1049         return ajFalse;
1050 
1051     ajStrDel(&gva->Subhandle);
1052 
1053     if (subhandle)
1054         gva->Subhandle = ajStrNewRef(subhandle);
1055 
1056     return ajTrue;
1057 }
1058 
1059 
1060 
1061 
1062 /* @func ensGvalleleSetSubidentifier ******************************************
1063 **
1064 ** Set the subidentifier member of an Ensembl Genetic Variation Allele.
1065 **
1066 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
1067 ** @param [r] subidentifier [ajuint] Subidentifier
1068 **
1069 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1070 **
1071 ** @release 6.4.0
1072 ** @@
1073 ******************************************************************************/
1074 
ensGvalleleSetSubidentifier(EnsPGvallele gva,ajuint subidentifier)1075 AjBool ensGvalleleSetSubidentifier(EnsPGvallele gva, ajuint subidentifier)
1076 {
1077     if (!gva)
1078         return ajFalse;
1079 
1080     gva->Subidentifier = subidentifier;
1081 
1082     return ajTrue;
1083 }
1084 
1085 
1086 
1087 
1088 /* @section debugging *********************************************************
1089 **
1090 ** Functions for reporting of an Ensembl Genetic Variation Allele object.
1091 **
1092 ** @fdata [EnsPGvallele]
1093 **
1094 ** @nam3rule Trace Report Ensembl Genetic Variation Allele members to
1095 **                 debug file
1096 **
1097 ** @argrule Trace gva [const EnsPGvallele] Ensembl Genetic Variation Allele
1098 ** @argrule Trace level [ajuint] Indentation level
1099 **
1100 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
1101 **
1102 ** @fcategory misc
1103 ******************************************************************************/
1104 
1105 
1106 
1107 
1108 /* @func ensGvalleleTrace *****************************************************
1109 **
1110 ** Trace an Ensembl Genetic Variation Allele.
1111 **
1112 ** @param [r] gva [const EnsPGvallele] Ensembl Genetic Variation Allele
1113 ** @param [r] level [ajuint] Indentation level
1114 **
1115 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1116 **
1117 ** @release 6.2.0
1118 ** @@
1119 ******************************************************************************/
1120 
ensGvalleleTrace(const EnsPGvallele gva,ajuint level)1121 AjBool ensGvalleleTrace(const EnsPGvallele gva, ajuint level)
1122 {
1123     AjIList iter = NULL;
1124 
1125     AjPStr description = NULL;
1126     AjPStr indent      = NULL;
1127 
1128     if (!gva)
1129         return ajFalse;
1130 
1131     indent = ajStrNew();
1132 
1133     ajStrAppendCountK(&indent, ' ', level * 2);
1134 
1135     ajDebug("%SensGvalleleTrace %p\n"
1136             "%S  Use %u\n"
1137             "%S  Identifier %u\n"
1138             "%S  Adaptor %p\n"
1139             "%S  Population %p\n"
1140             "%S  Allele '%S'\n"
1141             "%S  Subhandle '%S'\n"
1142             "%S  Faileddescriptions %p\n"
1143             "%S  Counter %u\n"
1144             "%S  Gvvariationidentifier %u\n"
1145             "%S  Subidentifier %u\n"
1146             "%S  Frequency %f\n",
1147             indent, gva,
1148             indent, gva->Use,
1149             indent, gva->Identifier,
1150             indent, gva->Adaptor,
1151             indent, gva->Gvpopulation,
1152             indent, gva->Allele,
1153             indent, gva->Subhandle,
1154             indent, gva->Faileddescriptions,
1155             indent, gva->Counter,
1156             indent, gva->Gvvariationidentifier,
1157             indent, gva->Subidentifier,
1158             indent, gva->Frequency);
1159 
1160     ensGvpopulationTrace(gva->Gvpopulation, level + 1);
1161 
1162     /* Trace the AJAX List of AJAX String (failed description) objects. */
1163 
1164     if (gva->Faileddescriptions)
1165     {
1166         ajDebug("%S    AJAX List %p of AJAX String (failed description) "
1167                 "objects:\n",
1168                 indent, gva->Faileddescriptions);
1169 
1170         iter = ajListIterNewread(gva->Faileddescriptions);
1171 
1172         while (!ajListIterDone(iter))
1173         {
1174             description = ajListstrIterGet(iter);
1175 
1176             ajDebug("%S      %S\n", description);
1177         }
1178     }
1179 
1180     ajListIterDel(&iter);
1181 
1182     ajStrDel(&indent);
1183 
1184     return ajTrue;
1185 }
1186 
1187 
1188 
1189 
1190 /* @section calculate *********************************************************
1191 **
1192 ** Functions for calculating information from an
1193 ** Ensembl Genetic Variation Allele object.
1194 **
1195 ** @fdata [EnsPGvallele]
1196 **
1197 ** @nam3rule Calculate Calculate Ensembl Genetic Variation Allele information
1198 ** @nam4rule Memsize Calculate the memory size in bytes
1199 **
1200 ** @argrule * gva [const EnsPGvallele] Ensembl Genetic Variation Allele
1201 **
1202 ** @valrule Memsize [size_t] Memory size in bytes or 0
1203 **
1204 ** @fcategory misc
1205 ******************************************************************************/
1206 
1207 
1208 
1209 
1210 /* @func ensGvalleleCalculateMemsize ******************************************
1211 **
1212 ** Get the memory size in bytes of an Ensembl Genetic Variation Allele.
1213 **
1214 ** @param [r] gva [const EnsPGvallele] Ensembl Genetic Variation Allele
1215 **
1216 ** @return [size_t] Memory size in bytes or 0
1217 **
1218 ** @release 6.4.0
1219 ** @@
1220 ******************************************************************************/
1221 
ensGvalleleCalculateMemsize(const EnsPGvallele gva)1222 size_t ensGvalleleCalculateMemsize(const EnsPGvallele gva)
1223 {
1224     size_t size = 0;
1225 
1226     if (!gva)
1227         return 0;
1228 
1229     size += sizeof (EnsOGvallele);
1230 
1231     size += ensGvpopulationCalculateMemsize(gva->Gvpopulation);
1232 
1233     if (gva->Allele)
1234     {
1235         size += sizeof (AjOStr);
1236 
1237         size += ajStrGetRes(gva->Allele);
1238     }
1239 
1240     if (gva->Subhandle)
1241     {
1242         size += sizeof (AjOStr);
1243 
1244         size += ajStrGetRes(gva->Subhandle);
1245     }
1246 
1247     return size;
1248 }
1249 
1250 
1251 
1252 
1253 /* @section query *************************************************************
1254 **
1255 ** Functions for querying the properties of an
1256 ** Ensembl Genetic Variation Allele.
1257 **
1258 ** @fdata [EnsPGvallele]
1259 **
1260 ** @nam3rule Is Check whether an Ensembl Genetic Variation Allele represents a
1261 ** certain property
1262 ** @nam4rule Failed Check for failed
1263 **
1264 ** @argrule Failed gva [EnsPGvallele] Ensembl Genetic Variation Allele
1265 ** @argrule Failed Presult [AjBool*] Boolean result
1266 **
1267 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
1268 **
1269 ** @fcategory use
1270 ******************************************************************************/
1271 
1272 
1273 
1274 
1275 /* @func ensGvalleleIsFailed **************************************************
1276 **
1277 ** Check if an Ensembl Genetic Variation Allele has been failed.
1278 ** This function calls ensGvalleleLoadAllFaileddescriptions to find out if
1279 ** failed descriptiosn are available.
1280 **
1281 ** @param [u] gva [EnsPGvallele] Ensembl Genetic Variation Allele
1282 ** @param [u] Presult [AjBool*] ajTrue, if an Ensembl Genetic Variation Allele
1283 **                              has been failed
1284 **
1285 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1286 **
1287 ** @release 6.4.0
1288 ** @@
1289 ******************************************************************************/
1290 
ensGvalleleIsFailed(EnsPGvallele gva,AjBool * Presult)1291 AjBool ensGvalleleIsFailed(EnsPGvallele gva, AjBool *Presult)
1292 {
1293     const AjPList descriptions = NULL;
1294 
1295     if (!gva)
1296         return ajFalse;
1297 
1298     if (!Presult)
1299         return ajFalse;
1300 
1301     descriptions = ensGvalleleLoadAllFaileddescriptions(gva);
1302 
1303     if (ajListGetLength(descriptions) > 0)
1304         *Presult = ajTrue;
1305     else
1306         *Presult = ajFalse;
1307 
1308     return ajTrue;
1309 }
1310 
1311 
1312 
1313 
1314 /* @datasection [EnsPGvalleleadaptor] Ensembl Genetic Variation Allele Adaptor
1315 **
1316 ** @nam2rule Gvalleleadaptor Functions for manipulating
1317 ** Ensembl Genetic Variation Allele Adaptor objects
1318 **
1319 ** @cc Bio::EnsEMBL::Variation::DBSQL::AlleleAdaptor
1320 ** @cc CVS Revision: 1.12
1321 ** @cc CVS Tag: branch-ensembl-68
1322 **
1323 ******************************************************************************/
1324 
1325 
1326 
1327 
1328 /* @funcstatic gvalleleadaptorFetchAllbyStatement *****************************
1329 **
1330 ** Fetch all Ensembl Genetic Variation Allele objects via an SQL statement.
1331 **
1332 ** @param [u] ba [EnsPBaseadaptor] Ensembl Base Adaptor
1333 ** @param [r] statement [const AjPStr] SQL statement
1334 ** @param [uN] am [EnsPAssemblymapper] Ensembl Assembly Mapper
1335 ** @param [uN] slice [EnsPSlice] Ensembl Slice
1336 ** @param [u] gvas [AjPList]
1337 ** AJAX List of Ensembl Genetic Variation Allele objects
1338 **
1339 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1340 **
1341 ** @release 6.4.0
1342 ** @@
1343 ******************************************************************************/
1344 
gvalleleadaptorFetchAllbyStatement(EnsPBaseadaptor ba,const AjPStr statement,EnsPAssemblymapper am,EnsPSlice slice,AjPList gvas)1345 static AjBool gvalleleadaptorFetchAllbyStatement(
1346     EnsPBaseadaptor ba,
1347     const AjPStr statement,
1348     EnsPAssemblymapper am,
1349     EnsPSlice slice,
1350     AjPList gvas)
1351 {
1352     float frequency = 0.0F;
1353 
1354     ajuint counter    = 0U;
1355     ajuint identifier = 0U;
1356     ajuint gvpid      = 0U;
1357     ajuint gvvid      = 0U;
1358     ajuint lastid     = 0U;
1359     ajuint subid      = 0U;
1360 
1361     AjPSqlstatement sqls = NULL;
1362     AjISqlrow sqli       = NULL;
1363     AjPSqlrow sqlr       = NULL;
1364 
1365     AjPStr allele       = NULL;
1366 
1367     EnsPDatabaseadaptor dba = NULL;
1368 
1369     EnsPGvallele        gva  = NULL;
1370     EnsPGvalleleadaptor gvaa = NULL;
1371 
1372     EnsPGvpopulation        gvp  = NULL;
1373     EnsPGvpopulationadaptor gvpa = NULL;
1374 
1375     if (ajDebugTest("gvalleleadaptorFetchAllbyStatement"))
1376         ajDebug("gvalleleadaptorFetchAllbyStatement\n"
1377                 "  ba %p\n"
1378                 "  statement %p\n"
1379                 "  am %p\n"
1380                 "  slice %p\n"
1381                 "  gvas %p\n",
1382                 ba,
1383                 statement,
1384                 am,
1385                 slice,
1386                 gvas);
1387 
1388     if (!ba)
1389         return ajFalse;
1390 
1391     if (!statement)
1392         return ajFalse;
1393 
1394     if (!gvas)
1395         return ajFalse;
1396 
1397     dba = ensBaseadaptorGetDatabaseadaptor(ba);
1398 
1399     gvaa = ensRegistryGetGvalleleadaptor(dba);
1400     gvpa = ensRegistryGetGvpopulationadaptor(dba);
1401 
1402     sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
1403 
1404     sqli = ajSqlrowiterNew(sqls);
1405 
1406     while (!ajSqlrowiterDone(sqli))
1407     {
1408         identifier = 0U;
1409         gvvid      = 0U;
1410         subid      = 0U;
1411         allele     = ajStrNew();
1412         frequency  = 0.0F;
1413         gvpid      = 0U;
1414         counter    = 0U;
1415 
1416         sqlr = ajSqlrowiterGet(sqli);
1417 
1418         ajSqlcolumnToUint(sqlr, &identifier);
1419         ajSqlcolumnToUint(sqlr, &gvvid);
1420         ajSqlcolumnToUint(sqlr, &subid);
1421         ajSqlcolumnToStr(sqlr, &allele);
1422         ajSqlcolumnToFloat(sqlr, &frequency);
1423         ajSqlcolumnToUint(sqlr, &gvpid);
1424         ajSqlcolumnToUint(sqlr, &counter);
1425 
1426         if (identifier != lastid)
1427         {
1428             ensGvpopulationadaptorFetchByIdentifier(gvpa, gvpid, &gvp);
1429 
1430             gva = ensGvalleleNewIni(gvaa,
1431                                     identifier,
1432                                     gvp,
1433                                     allele,
1434                                     frequency,
1435                                     subid,
1436                                     counter,
1437                                     gvvid);
1438 
1439             ajListPushAppend(gvas, (void *) gva);
1440 
1441             ensGvpopulationDel(&gvp);
1442         }
1443 
1444         ajStrDel(&allele);
1445 
1446         lastid = identifier;
1447     }
1448 
1449     ajSqlrowiterDel(&sqli);
1450 
1451     ensDatabaseadaptorSqlstatementDel(dba, &sqls);
1452 
1453     return ajTrue;
1454 }
1455 
1456 
1457 
1458 
1459 /* @section constructors ******************************************************
1460 **
1461 ** All constructors return a new Ensembl Genetic Variation Allele Adaptor
1462 ** by pointer.
1463 ** It is the responsibility of the user to first destroy any previous
1464 ** Ensembl Genetic Variation Allele Adaptor. The target pointer does not
1465 ** need to be initialised to NULL, but it is good programming practice to do
1466 ** so anyway.
1467 **
1468 ** @fdata [EnsPGvalleleadaptor]
1469 **
1470 ** @nam3rule New Constructor
1471 **
1472 ** @argrule New dba [EnsPDatabaseadaptor] Ensembl Database Adaptor
1473 **
1474 ** @valrule * [EnsPGvalleleadaptor]
1475 ** Ensembl Genetic Variation Allele Adaptor or NULL
1476 **
1477 ** @fcategory new
1478 ******************************************************************************/
1479 
1480 
1481 
1482 
1483 /* @func ensGvalleleadaptorNew ************************************************
1484 **
1485 ** Default constructor for an Ensembl Genetic Variation Allele Adaptor.
1486 **
1487 ** Ensembl Object Adaptors are singleton objects in the sense that a single
1488 ** instance of an Ensembl Object Adaptor connected to a particular database is
1489 ** sufficient to instantiate any number of Ensembl Objects from the database.
1490 ** Each Ensembl Object will have a weak reference to the Object Adaptor that
1491 ** instantiated it. Therefore, Ensembl Object Adaptors should not be
1492 ** instantiated directly, but rather obtained from the Ensembl Registry,
1493 ** which will in turn call this function if neccessary.
1494 **
1495 ** @see ensRegistryGetDatabaseadaptor
1496 ** @see ensRegistryGetGvalleleadaptor
1497 **
1498 ** @cc Bio::EnsEMBL::Variation::DBSQL::AlleleAdaptor::new
1499 ** @param [u] dba [EnsPDatabaseadaptor] Ensembl Database Adaptor
1500 **
1501 ** @return [EnsPGvalleleadaptor]
1502 ** Ensembl Genetic Variation Allele Adaptor or NULL
1503 **
1504 ** @release 6.4.0
1505 ** @@
1506 ******************************************************************************/
1507 
ensGvalleleadaptorNew(EnsPDatabaseadaptor dba)1508 EnsPGvalleleadaptor ensGvalleleadaptorNew(
1509     EnsPDatabaseadaptor dba)
1510 {
1511     EnsPGvalleleadaptor gvaa = NULL;
1512 
1513     EnsPGvdatabaseadaptor gvdba = NULL;
1514 
1515     if (!dba)
1516         return NULL;
1517 
1518     gvdba = ensRegistryGetGvdatabaseadaptor(dba);
1519 
1520     if (!gvdba)
1521         return NULL;
1522 
1523     AJNEW0(gvaa);
1524 
1525     gvaa->Excludeadaptor = ensGvbaseadaptorNew(
1526         gvdba,
1527         gvalleleadaptorKTablenames,
1528         gvalleleadaptorKColumnnames,
1529         gvalleleadaptorKLeftjoins,
1530         gvalleleadaptorKDefaultcondition,
1531         (const char *) NULL,
1532         &gvalleleadaptorFetchAllbyStatement);
1533 
1534     /*
1535     ** If failed Variation objects are included, add the "failed_variation"
1536     ** SQL table name, but skip the SQL LEFT JOIN.
1537     */
1538 
1539     gvaa->Includeadaptor = ensGvbaseadaptorNew(
1540         gvdba,
1541         gvalleleadaptorfailedvariationKTablenames,
1542         gvalleleadaptorKColumnnames,
1543         (const EnsPBaseadaptorLeftjoin) NULL,
1544         gvalleleadaptorKDefaultcondition,
1545         (const char *) NULL,
1546         &gvalleleadaptorFetchAllbyStatement);
1547 
1548     return gvaa;
1549 }
1550 
1551 
1552 
1553 
1554 /* @section destructors *******************************************************
1555 **
1556 ** Destruction destroys all internal data structures and frees the memory
1557 ** allocated for an Ensembl Genetic Variation Allele Adaptor object.
1558 **
1559 ** @fdata [EnsPGvalleleadaptor]
1560 **
1561 ** @nam3rule Del Destroy (free) an
1562 ** Ensembl Genetic Variation Allele Adaptor
1563 **
1564 ** @argrule * Pgvaa [EnsPGvalleleadaptor*]
1565 ** Ensembl Genetic Variation Allele Adaptor address
1566 **
1567 ** @valrule * [void]
1568 **
1569 ** @fcategory delete
1570 ******************************************************************************/
1571 
1572 
1573 
1574 
1575 /* @func ensGvalleleadaptorDel ************************************************
1576 **
1577 ** Default destructor for an Ensembl Genetic Variation Allele Adaptor.
1578 **
1579 ** Ensembl Object Adaptors are singleton objects that are registered in the
1580 ** Ensembl Registry and weakly referenced by Ensembl Objects that have been
1581 ** instantiated by it. Therefore, Ensembl Object Adaptors should never be
1582 ** destroyed directly. Upon exit, the Ensembl Registry will call this function
1583 ** if required.
1584 **
1585 ** @param [d] Pgvaa [EnsPGvalleleadaptor*]
1586 ** Ensembl Genetic Variation Allele Adaptor address
1587 **
1588 ** @return [void]
1589 **
1590 ** @release 6.4.0
1591 ** @@
1592 ******************************************************************************/
1593 
ensGvalleleadaptorDel(EnsPGvalleleadaptor * Pgvaa)1594 void ensGvalleleadaptorDel(EnsPGvalleleadaptor *Pgvaa)
1595 {
1596     EnsPGvalleleadaptor pthis = NULL;
1597 
1598     if (!Pgvaa)
1599         return;
1600 
1601 #if defined(AJ_DEBUG) && AJ_DEBUG >= 1
1602     if (ajDebugTest("ensGvalleleadaptorDel"))
1603         ajDebug("ensGvalleleadaptorDel\n"
1604                 "  *Pgvaa %p\n",
1605                 *Pgvaa);
1606 #endif /* defined(AJ_DEBUG) && AJ_DEBUG >= 1 */
1607 
1608     if (!(pthis = *Pgvaa))
1609         return;
1610 
1611     ensGvbaseadaptorDel(&pthis->Excludeadaptor);
1612     ensGvbaseadaptorDel(&pthis->Includeadaptor);
1613 
1614     ajMemFree((void **) Pgvaa);
1615 
1616     return;
1617 }
1618 
1619 
1620 
1621 
1622 /* @section member retrieval **************************************************
1623 **
1624 ** Functions for returning members of an
1625 ** Ensembl Genetic Variation Allele Adaptor object.
1626 **
1627 ** @fdata [EnsPGvalleleadaptor]
1628 **
1629 ** @nam3rule Get Return Ensembl Genetic Variation Allele Adaptor attribute(s)
1630 ** @nam4rule Baseadaptor Return the Ensembl Base Adaptor
1631 ** @nam4rule Databaseadaptor Return the Ensembl Database Adaptor
1632 ** @nam4rule Gvdatabaseadaptor
1633 ** Return the Ensembl Genetic Variation Database Adaptor
1634 **
1635 ** @argrule * gvaa [const EnsPGvalleleadaptor]
1636 ** Ensembl Genetic Variation Allele Adaptor
1637 **
1638 ** @valrule Baseadaptor [EnsPBaseadaptor] Ensembl Base Adaptor or NULL
1639 ** @valrule Databaseadaptor [EnsPDatabaseadaptor]
1640 ** Ensembl Database Adaptor or NULL
1641 ** @valrule Gvdatabaseadaptor [EnsPGvdatabaseadaptor]
1642 ** Ensembl Genetic Variation Database Adaptor
1643 **
1644 ** @fcategory use
1645 ******************************************************************************/
1646 
1647 
1648 
1649 
1650 /* @func ensGvalleleadaptorGetDatabaseadaptor *********************************
1651 **
1652 ** Get the Ensembl Database Adaptor member of an
1653 ** Ensembl Genetic Variation Allele Adaptor.
1654 **
1655 ** @param [r] gvaa [const EnsPGvalleleadaptor]
1656 ** Ensembl Genetic Variation Allele Adaptor
1657 **
1658 ** @return [EnsPDatabaseadaptor] Ensembl Database Adaptor or NULL
1659 **
1660 ** @release 6.4.0
1661 ** @@
1662 ******************************************************************************/
1663 
ensGvalleleadaptorGetDatabaseadaptor(const EnsPGvalleleadaptor gvaa)1664 EnsPDatabaseadaptor ensGvalleleadaptorGetDatabaseadaptor(
1665     const EnsPGvalleleadaptor gvaa)
1666 {
1667     if (!gvaa)
1668         return NULL;
1669 
1670     /*
1671     ** It does not matter from which Ensembl Genetic Variation Base Adaptor
1672     ** the Ensembl Genetic Variation Database Adaptor is taken, they both
1673     ** link to the same object.
1674     */
1675 
1676     return ensGvdatabaseadaptorGetDatabaseadaptor(
1677         ensGvbaseadaptorGetGvdatabaseadaptor(gvaa->Excludeadaptor));
1678 }
1679 
1680 
1681 
1682 
1683 /* @func ensGvalleleadaptorGetGvdatabaseadaptor *******************************
1684 **
1685 ** Get the Ensembl Genetic Variation Database Adaptor member of an
1686 ** Ensembl Genetic Variation Allele Adaptor.
1687 **
1688 ** @param [r] gvaa [const EnsPGvalleleadaptor]
1689 ** Ensembl Genetic Variation Allele Adaptor
1690 **
1691 ** @return [EnsPGvdatabaseadaptor]
1692 ** Ensembl Genetic Variation Database Adaptor or NULL
1693 **
1694 ** @release 6.4.0
1695 ** @@
1696 ******************************************************************************/
1697 
ensGvalleleadaptorGetGvdatabaseadaptor(const EnsPGvalleleadaptor gvaa)1698 EnsPGvdatabaseadaptor ensGvalleleadaptorGetGvdatabaseadaptor(
1699     const EnsPGvalleleadaptor gvaa)
1700 {
1701     /*
1702     ** It does not matter from which Ensembl Genetic Variation Base Adaptor
1703     ** the Ensembl Genetic Variation Database Adaptor is taken, they both
1704     ** link to the same object.
1705     */
1706 
1707     return (gvaa) ?
1708         ensGvbaseadaptorGetGvdatabaseadaptor(gvaa->Excludeadaptor) : NULL;
1709 }
1710 
1711 
1712 
1713 
1714 /* @section object retrieval **************************************************
1715 **
1716 ** Functions for fetching Ensembl Genetic Variation Allele objects from an
1717 ** Ensembl SQL database.
1718 **
1719 ** @fdata [EnsPGvalleleadaptor]
1720 **
1721 ** @nam3rule Fetch Fetch Ensembl Genetic Variation Allele object(s)
1722 ** @nam4rule All Fetch all Ensembl Genetic Variation Allele objects
1723 ** @nam4rule Allby Fetch all Ensembl Genetic Variation Allele objects
1724 **                 matching a criterion
1725 ** @nam5rule Gvvariation Fetch all by an Ensembl Genetic Variation Variation
1726 ** @nam5rule Subidentifier
1727 ** @nam4rule By Fetch one Ensembl Genetic Variation Allele object
1728 **              matching a criterion
1729 ** @nam5rule Identifier Fetch by a SQL database-internal identifier
1730 **
1731 ** @argrule * gvaa [EnsPGvalleleadaptor]
1732 ** Ensembl Genetic Variation Allele Adaptor
1733 ** @argrule Gvvariation gvv [const EnsPGvvariation]
1734 ** Ensembl Genetic Variation Variation
1735 ** @argrule Gvvariation gvp [const EnsPGvpopulation]
1736 ** Ensembl Genetic Variation Population
1737 ** @argrule Subidentifier subidentifier [ajuint] Subidentifier
1738 ** @argrule All gvas [AjPList] AJAX List of
1739 ** Ensembl Genetic Variation Allele objects
1740 ** @argrule Allby gvas [AjPList] AJAX List of
1741 ** Ensembl Genetic Variation Allele objects
1742 ** @argrule ByIdentifier identifier [ajuint] SQL database-internal identifier
1743 ** @argrule By Pgva [EnsPGvallele*]
1744 ** Ensembl Genetic Variation Allele object address
1745 **
1746 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
1747 **
1748 ** @fcategory use
1749 ******************************************************************************/
1750 
1751 
1752 
1753 
1754 /* @func ensGvalleleadaptorFetchAllbyGvvariation ******************************
1755 **
1756 ** Fetch all Ensembl Genetic Variation Allele objects by an
1757 ** Ensembl Genetic Variation Variation.
1758 **
1759 ** @cc Bio::EnsEMBL::Variation::DBSQL::AlleleAdaptor::fetch_all_by_Variation
1760 ** @param [u] gvaa [EnsPGvalleleadaptor]
1761 ** Ensembl Genetic Variation Allele Adaptor
1762 ** @param [r] gvv [const EnsPGvvariation]
1763 ** Ensembl Genetic Variation Variation
1764 ** @param [rN] gvp [const EnsPGvpopulation]
1765 ** Ensembl Genetic Variation Population
1766 ** @param [u] gvas [AjPList] AJAX List of
1767 ** Ensembl Genetic Variation Allele objects
1768 **
1769 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1770 **
1771 ** @release 6.4.0
1772 ** @@
1773 ******************************************************************************/
1774 
ensGvalleleadaptorFetchAllbyGvvariation(EnsPGvalleleadaptor gvaa,const EnsPGvvariation gvv,const EnsPGvpopulation gvp,AjPList gvas)1775 AjBool ensGvalleleadaptorFetchAllbyGvvariation(
1776     EnsPGvalleleadaptor gvaa,
1777     const EnsPGvvariation gvv,
1778     const EnsPGvpopulation gvp,
1779     AjPList gvas)
1780 {
1781     AjBool result = AJFALSE;
1782 
1783     AjPStr constraint    = NULL;
1784     AjPStr fvsconstraint = NULL;
1785 
1786     EnsPBaseadaptor ba = NULL;
1787 
1788     EnsPGvdatabaseadaptor gvdba = NULL;
1789 
1790     if (!gvaa)
1791         return ajFalse;
1792 
1793     if (!gvv)
1794         return ajFalse;
1795 
1796     if (!gvas)
1797         return ajFalse;
1798 
1799     /*
1800     ** It does not matter from which Ensembl Genetic Variation Base Adaptor
1801     ** the Ensembl Genetic Variation Database Adaptor is taken, they both
1802     ** link to the same object. It does, however, matter, which
1803     ** Ensembl Genetic Variation Base Adaptor gets used.
1804     */
1805 
1806     gvdba = ensGvbaseadaptorGetGvdatabaseadaptor(gvaa->Excludeadaptor);
1807 
1808     if (ensGvdatabaseadaptorGetFailedvariations(gvdba))
1809         ba = ensGvbaseadaptorGetBaseadaptor(gvaa->Includeadaptor);
1810     else
1811         ba = ensGvbaseadaptorGetBaseadaptor(gvaa->Excludeadaptor);
1812 
1813     constraint = ajFmtStr("allele.variation_id = %u",
1814                           ensGvvariationGetIdentifier(gvv));
1815 
1816     if (gvp)
1817         ajFmtPrintAppS(&constraint, " AND allele.sample_id = %u",
1818                        ensGvpopulationGetIdentifier(gvp));
1819 
1820     ensGvdatabaseadaptorFailedvariationsconstraint(
1821         gvdba,
1822         (const AjPStr) NULL,
1823         &fvsconstraint);
1824 
1825     ajStrAppendC(&constraint, " AND ");
1826     ajStrAppendS(&constraint, fvsconstraint);
1827 
1828     ajStrDel(&fvsconstraint);
1829 
1830     result = ensBaseadaptorFetchAllbyConstraint(
1831         ba,
1832         constraint,
1833         (EnsPAssemblymapper) NULL,
1834         (EnsPSlice) NULL,
1835         gvas);
1836 
1837     /*
1838     ** NOTE: The Perl API iterates over the Ensembl Genetic Variation Allele
1839     ** objects and adds the Ensembl Genetic Variation Variation object to each
1840     ** one of them. This will also add the Ensembl Genetic Variation Allele
1841     ** object to the Ensembl Genetic Variation Variation object and weaken
1842     ** the Variation object's link back to the Allele object.
1843     ** If an Ensembl Genetic Variation Population object was specified, the
1844     ** Perl API adds this object to the Allele as well.
1845     */
1846 
1847     ajStrDel(&constraint);
1848 
1849     return result;
1850 }
1851 
1852 
1853 
1854 
1855 /* @func ensGvalleleadaptorFetchAllbySubidentifier ****************************
1856 **
1857 ** Fetch all Ensembl Genetic Variation Allele objects by a Subidentifier.
1858 **
1859 ** @cc Bio::EnsEMBL::Variation::DBSQL::AlleleAdaptor::fetch_all_by_subsnp_id
1860 ** @param [u] gvaa [EnsPGvalleleadaptor]
1861 ** Ensembl Genetic Variation Allele Adaptor
1862 ** @param [r] subidentifier [ajuint] Subidentifier
1863 ** @param [u] gvas [AjPList] AJAX List of
1864 ** Ensembl Genetic Variation Allele objects
1865 **
1866 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1867 **
1868 ** @release 6.4.0
1869 ** @@
1870 ******************************************************************************/
1871 
ensGvalleleadaptorFetchAllbySubidentifier(EnsPGvalleleadaptor gvaa,ajuint subidentifier,AjPList gvas)1872 AjBool ensGvalleleadaptorFetchAllbySubidentifier(
1873     EnsPGvalleleadaptor gvaa,
1874     ajuint subidentifier,
1875     AjPList gvas)
1876 {
1877     AjBool result = AJFALSE;
1878 
1879     AjPStr constraint = NULL;
1880 
1881     EnsPBaseadaptor ba = NULL;
1882 
1883     EnsPGvdatabaseadaptor gvdba = NULL;
1884 
1885     if (!gvaa)
1886         return ajFalse;
1887 
1888     if (!subidentifier)
1889         return ajFalse;
1890 
1891     if (!gvas)
1892         return ajFalse;
1893 
1894     gvdba = ensGvbaseadaptorGetGvdatabaseadaptor(gvaa->Excludeadaptor);
1895 
1896     if (ensGvdatabaseadaptorGetFailedvariations(gvdba))
1897         ba = ensGvbaseadaptorGetBaseadaptor(gvaa->Includeadaptor);
1898     else
1899         ba = ensGvbaseadaptorGetBaseadaptor(gvaa->Excludeadaptor);
1900 
1901     constraint = ajFmtStr("allele.subsnp_id = %u", subidentifier);
1902 
1903     result = ensBaseadaptorFetchAllbyConstraint(
1904         ba,
1905         constraint,
1906         (EnsPAssemblymapper) NULL,
1907         (EnsPSlice) NULL,
1908         gvas);
1909 
1910     ajStrDel(&constraint);
1911 
1912     return result;
1913 }
1914 
1915 
1916 
1917 
1918 /* @section accessory object retrieval ****************************************
1919 **
1920 ** Functions for retrieving objects releated to
1921 ** Ensembl Genetic Variation Allele
1922 ** objects from an Ensembl SQL database.
1923 **
1924 ** @fdata [EnsPGvalleleadaptor]
1925 **
1926 ** @nam3rule Retrieve
1927 ** Retrieve Ensembl Genetic Variation Allele-releated object(s)
1928 ** @nam4rule All
1929 ** Retrieve all Ensembl Genetic Variation Allele-releated objects
1930 ** @nam5rule Identifiers Retrieve all SQL database-internal identifier objects
1931 ** @nam5rule Faileddescriptions Retrieve all failed descriptions
1932 ** @nam4rule Subhandle Retrieve the Subhandle
1933 **
1934 ** @argrule * gvaa [EnsPGvalleleadaptor]
1935 ** Ensembl Genetic Variation Allele Adaptor
1936 ** @argrule AllIdentifiers identifiers [AjPList]
1937 ** AJAX List of AJAX unsigned integer objects
1938 ** @argrule AllFaileddescriptions gva [const EnsPGvallele]
1939 ** Ensembl Genetic Variation Allele
1940 ** @argrule AllFaileddescriptions descriptions [AjPList]
1941 ** AJAX List of AJAX String (failed description) objects
1942 ** @argrule Subhandle gva [const EnsPGvallele]
1943 ** Ensembl Genetic Variation Allele
1944 ** @argrule Subhandle Psubhandle [AjPStr*] Subhandle
1945 **
1946 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
1947 **
1948 ** @fcategory use
1949 ******************************************************************************/
1950 
1951 
1952 
1953 
1954 /* @func ensGvalleleadaptorRetrieveAllFaileddescriptions **********************
1955 **
1956 ** Retrieve all failed descriptions of an
1957 ** Ensembl Genetic Variation Allele object.
1958 **
1959 ** @cc Bio::EnsEMBL::Variation::DBSQL::AlleleAdaptor::
1960 ** get_all_failed_descriptions
1961 ** @cc Bio::EnsEMBL::Variation::DBSQL::AlleleAdaptor::
1962 ** _internal_get_failed_descriptions
1963 ** @param [u] gvaa [EnsPGvalleleadaptor]
1964 ** Ensembl Genetic Variation Allele Adaptor
1965 ** @param [r] gva [const EnsPGvallele]
1966 ** Ensembl Genetic Variation Allele
1967 ** @param [u] descriptions [AjPList] AJAX List of
1968 ** AJAX String (description) objects
1969 **
1970 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1971 **
1972 ** @release 6.4.0
1973 ** @@
1974 ******************************************************************************/
1975 
ensGvalleleadaptorRetrieveAllFaileddescriptions(EnsPGvalleleadaptor gvaa,const EnsPGvallele gva,AjPList descriptions)1976 AjBool ensGvalleleadaptorRetrieveAllFaileddescriptions(
1977     EnsPGvalleleadaptor gvaa,
1978     const EnsPGvallele gva,
1979     AjPList descriptions)
1980 {
1981     AjPSqlstatement sqls = NULL;
1982     AjISqlrow sqli       = NULL;
1983     AjPSqlrow sqlr       = NULL;
1984 
1985     AjPStr description = NULL;
1986     AjPStr statement   = NULL;
1987 
1988     EnsPDatabaseadaptor dba = NULL;
1989 
1990     if (!gvaa)
1991         return ajFalse;
1992 
1993     if (!gva)
1994         return ajFalse;
1995 
1996     if (!descriptions)
1997         return ajFalse;
1998 
1999     dba = ensGvalleleadaptorGetDatabaseadaptor(gvaa);
2000 
2001     statement = ajFmtStr(
2002         "SELECT "
2003         "DISTINCT "
2004         "failed_description.description "
2005         "FROM "
2006         "failed_allele "
2007         "JOIN "
2008         "failed_description "
2009         "ON "
2010         "("
2011         "failed_description.failed_description_id = "
2012         "failed_allele.failed_description_id"
2013         ") "
2014         "WHERE "
2015         "failed_allele.allele_id = %u",
2016         gva->Identifier);
2017 
2018     sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
2019 
2020     sqli = ajSqlrowiterNew(sqls);
2021 
2022     while (!ajSqlrowiterDone(sqli))
2023     {
2024         description = ajStrNew();
2025 
2026         sqlr = ajSqlrowiterGet(sqli);
2027 
2028         ajSqlcolumnToStr(sqlr, &description);
2029 
2030         ajListstrPushAppend(descriptions, description);
2031     }
2032 
2033     ajSqlrowiterDel(&sqli);
2034 
2035     ensDatabaseadaptorSqlstatementDel(dba, &sqls);
2036 
2037     ajStrDel(&statement);
2038 
2039     return ajTrue;
2040 }
2041 
2042 
2043 
2044 
2045 /* @func ensGvalleleadaptorRetrieveSubhandle **********************************
2046 **
2047 ** Retrieve the Subhandle of an
2048 ** Ensembl Genetic Variation Allele object.
2049 **
2050 ** @cc Bio::EnsEMBL::Variation::DBSQL::AlleleAdaptor::get_subsnp_handle
2051 ** @param [u] gvaa [EnsPGvalleleadaptor]
2052 ** Ensembl Genetic Variation Allele Adaptor
2053 ** @param [r] gva [const EnsPGvallele]
2054 ** Ensembl Genetic Variation Allele
2055 ** @param [u] Psubhandle [AjPStr*] AJAX String (Subhandle) address
2056 **
2057 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2058 **
2059 ** @release 6.4.0
2060 ** @@
2061 ******************************************************************************/
2062 
ensGvalleleadaptorRetrieveSubhandle(EnsPGvalleleadaptor gvaa,const EnsPGvallele gva,AjPStr * Psubhandle)2063 AjBool ensGvalleleadaptorRetrieveSubhandle(
2064     EnsPGvalleleadaptor gvaa,
2065     const EnsPGvallele gva,
2066     AjPStr *Psubhandle)
2067 {
2068     AjPSqlstatement sqls = NULL;
2069     AjISqlrow sqli       = NULL;
2070     AjPSqlrow sqlr       = NULL;
2071 
2072     AjPStr handle    = NULL;
2073     AjPStr statement = NULL;
2074 
2075     EnsPDatabaseadaptor dba = NULL;
2076 
2077     if (!gvaa)
2078         return ajFalse;
2079 
2080     if (!gva)
2081         return ajFalse;
2082 
2083     dba = ensGvalleleadaptorGetDatabaseadaptor(gvaa);
2084 
2085     statement = ajFmtStr(
2086         "SELECT "
2087         "subsnp_handle.handle "
2088         "FROM "
2089         "subsnp_handle "
2090         "WHERE "
2091         "subsnp_handle.subsnp_id = %u "
2092         /* NOTE: LIMIT 1 is MySQL-specific. */
2093         "LIMIT 1",
2094         gva->Subidentifier);
2095 
2096     sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
2097 
2098     sqli = ajSqlrowiterNew(sqls);
2099 
2100     while (!ajSqlrowiterDone(sqli))
2101     {
2102         handle = ajStrNew();
2103 
2104         sqlr = ajSqlrowiterGet(sqli);
2105 
2106         ajSqlcolumnToStr(sqlr, &handle);
2107 
2108         ajStrAssignS(Psubhandle, handle);
2109 
2110         ajStrDel(&handle);
2111     }
2112 
2113     ajSqlrowiterDel(&sqli);
2114 
2115     ensDatabaseadaptorSqlstatementDel(dba, &sqls);
2116 
2117     ajStrDel(&statement);
2118 
2119     return ajTrue;
2120 }
2121