1 /* @source ensqcvariation *****************************************************
2 **
3 ** Ensembl Quality Check Variation functions
4 **
5 ** @author Copyright (C) 1999 Ensembl Developers
6 ** @author Copyright (C) 2006 Michael K. Schuster
7 ** @version $Revision: 1.18 $
8 ** @modified 2009 by Alan Bleasby for incorporation into EMBOSS core
9 ** @modified $Date: 2013/02/17 13:02:11 $ 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 "ensqcvariation.h"
34 
35 
36 
37 
38 /* ========================================================================= */
39 /* =============================== constants =============================== */
40 /* ========================================================================= */
41 
42 
43 
44 
45 /* ========================================================================= */
46 /* =========================== global variables ============================ */
47 /* ========================================================================= */
48 
49 
50 
51 
52 /* ========================================================================= */
53 /* ============================= private data ============================== */
54 /* ========================================================================= */
55 
56 
57 
58 
59 /* ========================================================================= */
60 /* =========================== private constants =========================== */
61 /* ========================================================================= */
62 
63 /* @conststatic qcvariationKClass *********************************************
64 **
65 ** The Ensembl Quality Check Variation class member is enumerated in
66 ** both, the SQL table definition and the data structure. The following strings
67 ** are used for conversion in database operations and correspond to
68 ** EnsEQcvariationClass.
69 **
70 ******************************************************************************/
71 
72 static const char *qcvariationKClass[] =
73 {
74     "",
75     "none",
76     "simple",
77     "splice",
78     "exon",
79     (const char *) NULL
80 };
81 
82 
83 
84 
85 /* @conststatic qcvariationKType **********************************************
86 **
87 ** The Ensembl Quality Check Variation type member is enumerated in
88 ** both, the SQL table definition and the data structure. The following strings
89 ** are used for conversion in database operations and correspond to
90 ** EnsEQcvariationType.
91 **
92 ******************************************************************************/
93 
94 static const char *qcvariationKType[] =
95 {
96     "",
97     "none",
98     "single",
99     "multi",
100     (const char *) NULL
101 };
102 
103 
104 
105 
106 /* @conststatic qcvariationKState *********************************************
107 **
108 ** The Ensembl Quality Check Variation state member is enumerated in
109 ** both, the SQL table definition and the data structure. The following strings
110 ** are used for conversion in database operations and correspond to
111 ** EnsEQcvariationState.
112 **
113 ******************************************************************************/
114 
115 static const char *qcvariationKState[] =
116 {
117     "",
118     "none",
119     "match",
120     "gap",
121     "frameshift",
122     "5'ss",
123     "3'ss",
124     "split",
125     (const char *) NULL
126 };
127 
128 
129 
130 
131 /* @conststatic qcvariationadaptorKTablenames *********************************
132 **
133 ** Array of Ensembl Quality Check Variation Adaptor SQL table names
134 **
135 ******************************************************************************/
136 
137 static const char *qcvariationadaptorKTablenames[] =
138 {
139     "variation",
140     (const char *) NULL
141 };
142 
143 
144 
145 
146 /* @conststatic qcvariationadaptorKColumnnames ********************************
147 **
148 ** Array of Ensembl Quality Check Variation Adaptor SQL column names
149 **
150 ******************************************************************************/
151 
152 static const char *qcvariationadaptorKColumnnames[] =
153 {
154     "variation.variation_id",
155     "variation.analysis_id",
156     "variation.alignment_id",
157     "variation.query_db_id",
158     "variation.query_id"
159     "variation.query_start",
160     "variation.query_end",
161     "variation.query_seq",
162     "variation.target_db_id"
163     "variation.target_id",
164     "variation.target_start",
165     "variation.target_end",
166     "variation.target_seq",
167     "variation.class",
168     "variation.type",
169     "variation.state",
170     (const char *) NULL
171 };
172 
173 
174 
175 
176 /* ========================================================================= */
177 /* =========================== private variables =========================== */
178 /* ========================================================================= */
179 
180 
181 
182 
183 /* ========================================================================= */
184 /* =========================== private functions =========================== */
185 /* ========================================================================= */
186 
187 static AjBool qcvariationadaptorFetchAllbyStatement(
188     EnsPBaseadaptor ba,
189     const AjPStr statement,
190     EnsPAssemblymapper am,
191     EnsPSlice slice,
192     AjPList qcvs);
193 
194 
195 
196 
197 /* ========================================================================= */
198 /* ======================= All functions by section ======================== */
199 /* ========================================================================= */
200 
201 
202 
203 
204 /* @filesection ensqc *********************************************************
205 **
206 ** @nam1rule ens Function belongs to the Ensembl library
207 **
208 ******************************************************************************/
209 
210 
211 
212 
213 /* @datasection [EnsPQcvariation] Ensembl Quality Check Variation *************
214 **
215 ** @nam2rule Qcvariation Functions for manipulating
216 ** Ensembl Quality Check Variation objects
217 **
218 ** @cc Bio::EnsEMBL::QC::Variation
219 ** @cc CVS Revision:
220 ** @cc CVS Tag:
221 **
222 ******************************************************************************/
223 
224 
225 
226 
227 /* @section constructors ******************************************************
228 **
229 ** All constructors return a new Ensembl Quality Check Variation by pointer.
230 ** It is the responsibility of the user to first destroy any previous
231 ** Quality Check Variation. The target pointer does not need to be initialised
232 ** to NULL, but it is good programming practice to do so anyway.
233 **
234 ** @fdata [EnsPQcvariation]
235 **
236 ** @nam3rule New Constructor
237 ** @nam4rule Cpy Constructor with existing object
238 ** @nam4rule Ini Constructor with initial values
239 ** @nam4rule Ref Constructor by incrementing the reference counter
240 **
241 ** @argrule Cpy qcv [const EnsPQcvariation] Ensembl Quality Check Variation
242 ** @argrule Ini qcva [EnsPQcvariationadaptor]
243 ** Ensembl Quality Check Variation Adaptor
244 ** @argrule Ini identifier [ajuint] SQL database-internal identifier
245 ** @argrule Ini qca [EnsPQcalignment] Ensembl Quality Check Alignment
246 ** @argrule Ini analysis [EnsPAnalysis] Ensembl Analysis
247 ** @argrule Ini qsequence [EnsPQcsequence]
248 ** Query Ensembl Quality Check Sequence
249 ** @argrule Ini qstart [ajuint] Query start
250 ** @argrule Ini qend [ajuint] Query end
251 ** @argrule Ini qstring [AjPStr] Query string
252 ** @argrule Ini tsequence [EnsPQcsequence]
253 ** Target Ensembl Quality Check Sequence
254 ** @argrule Ini tstart [ajuint] Target start
255 ** @argrule Ini tend [ajuint] Target end
256 ** @argrule Ini tstring [AjPStr] Target string
257 ** @argrule Ini class [EnsEQcvariationClass] Class
258 ** @argrule Ini type [EnsEQcvariationType] Type
259 ** @argrule Ini state [EnsEQcvariationState] State
260 ** @argrule Ref qcv [EnsPQcvariation] Ensembl Quality Check Variation
261 **
262 ** @valrule * [EnsPQcvariation] Ensembl Quality Check Variation or NULL
263 **
264 ** @fcategory new
265 ******************************************************************************/
266 
267 
268 
269 
270 /* @func ensQcvariationNewCpy *************************************************
271 **
272 ** Object-based constructor function, which returns an independent object.
273 **
274 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
275 **
276 ** @return [EnsPQcvariation] Ensembl Quality Check Variation or NULL
277 **
278 ** @release 6.4.0
279 ** @@
280 ******************************************************************************/
281 
ensQcvariationNewCpy(const EnsPQcvariation qcv)282 EnsPQcvariation ensQcvariationNewCpy(const EnsPQcvariation qcv)
283 {
284     EnsPQcvariation pthis = NULL;
285 
286     if (!qcv)
287         return NULL;
288 
289     AJNEW0(pthis);
290 
291     pthis->Use = 1U;
292 
293     pthis->Identifier = qcv->Identifier;
294 
295     pthis->Adaptor = qcv->Adaptor;
296 
297     pthis->Qcalignment = ensQcalignmentNewRef(qcv->Qcalignment);
298 
299     pthis->Analysis = ensAnalysisNewRef(qcv->Analysis);
300 
301     pthis->QuerySequence = ensQcsequenceNewRef(qcv->QuerySequence);
302     pthis->QueryStart    = qcv->QueryStart;
303     pthis->QueryEnd      = qcv->QueryEnd;
304 
305     if (qcv->QueryString)
306         pthis->QueryString = ajStrNewRef(qcv->QueryString);
307 
308     pthis->TargetSequence = ensQcsequenceNewRef(qcv->TargetSequence);
309     pthis->TargetStart    = qcv->TargetStart;
310     pthis->TargetEnd      = qcv->TargetEnd;
311 
312     if (qcv->TargetString)
313         pthis->TargetString = ajStrNewRef(qcv->TargetString);
314 
315     pthis->Class = qcv->Class;
316     pthis->Type  = qcv->Type;
317     pthis->State = qcv->State;
318 
319     return pthis;
320 }
321 
322 
323 
324 
325 /* @func ensQcvariationNewIni *************************************************
326 **
327 ** Constructor for an Ensembl Quality Check Variation with initial values.
328 **
329 ** @cc Bio::EnsEMBL::Storable::new
330 ** @param [u] qcva [EnsPQcvariationadaptor]
331 ** Ensembl Quality Check Variation Adaptor
332 ** @param [r] identifier [ajuint] SQL database-internal identifier
333 ** @cc Bio::EnsEMBL::QC::Variation::new
334 ** @param [u] qca [EnsPQcalignment] Ensembl Quality Check Alignment
335 ** @param [u] analysis [EnsPAnalysis] Ensembl Analysis
336 ** @param [u] qsequence [EnsPQcsequence] Query Ensembl Quality Check Sequence
337 ** @param [r] qstart [ajuint] Query start
338 ** @param [r] qend [ajuint] Query end
339 ** @param [u] qstring [AjPStr] Query string
340 ** @param [u] tsequence [EnsPQcsequence] Target Ensembl Quality Check Sequence
341 ** @param [r] tstart [ajuint] Target start
342 ** @param [r] tend [ajuint] Target end
343 ** @param [u] tstring [AjPStr] Target string
344 ** @param [u] class [EnsEQcvariationClass] Class
345 ** @param [u] type [EnsEQcvariationType] Type
346 ** @param [u] state [EnsEQcvariationState] State
347 **
348 ** @return [EnsPQcvariation] Ensembl Quality Check Variation or NULL
349 **
350 ** @release 6.4.0
351 ** @@
352 ******************************************************************************/
353 
ensQcvariationNewIni(EnsPQcvariationadaptor qcva,ajuint identifier,EnsPQcalignment qca,EnsPAnalysis analysis,EnsPQcsequence qsequence,ajuint qstart,ajuint qend,AjPStr qstring,EnsPQcsequence tsequence,ajuint tstart,ajuint tend,AjPStr tstring,EnsEQcvariationClass class,EnsEQcvariationType type,EnsEQcvariationState state)354 EnsPQcvariation ensQcvariationNewIni(EnsPQcvariationadaptor qcva,
355                                      ajuint identifier,
356                                      EnsPQcalignment qca,
357                                      EnsPAnalysis analysis,
358                                      EnsPQcsequence qsequence,
359                                      ajuint qstart,
360                                      ajuint qend,
361                                      AjPStr qstring,
362                                      EnsPQcsequence tsequence,
363                                      ajuint tstart,
364                                      ajuint tend,
365                                      AjPStr tstring,
366                                      EnsEQcvariationClass class,
367                                      EnsEQcvariationType type,
368                                      EnsEQcvariationState state)
369 {
370     EnsPQcvariation qcv = NULL;
371 
372     if (!qca)
373         return NULL;
374 
375     if (!analysis)
376         return NULL;
377 
378     if (!qsequence)
379         return NULL;
380 
381     if (!tsequence)
382         return NULL;
383 
384     AJNEW0(qcv);
385 
386     qcv->Use = 1U;
387 
388     qcv->Identifier = identifier;
389 
390     qcv->Adaptor = qcva;
391 
392     qcv->Qcalignment = ensQcalignmentNewRef(qca);
393 
394     qcv->Analysis = ensAnalysisNewRef(analysis);
395 
396     qcv->QuerySequence = ensQcsequenceNewRef(qsequence);
397     qcv->QueryStart    = qstart;
398     qcv->QueryEnd      = qend;
399 
400     if (qstring)
401         qcv->QueryString = ajStrNewRef(qstring);
402 
403     qcv->TargetSequence = ensQcsequenceNewRef(tsequence);
404     qcv->TargetStart    = tstart;
405     qcv->TargetEnd      = tend;
406 
407     if (tstring)
408         qcv->TargetString = ajStrNewRef(tstring);
409 
410     qcv->Class = class;
411     qcv->Type  = type;
412     qcv->State = state;
413 
414     return qcv;
415 }
416 
417 
418 
419 
420 /* @func ensQcvariationNewRef *************************************************
421 **
422 ** Ensembl Object referencing function, which returns a pointer to the
423 ** Ensembl Object passed in and increases its reference count.
424 **
425 ** @param [u] qcv [EnsPQcvariation] Ensembl Variation
426 **
427 ** @return [EnsPQcvariation] Ensembl Quality Check Variation or NULL
428 **
429 ** @release 6.2.0
430 ** @@
431 ******************************************************************************/
432 
ensQcvariationNewRef(EnsPQcvariation qcv)433 EnsPQcvariation ensQcvariationNewRef(EnsPQcvariation qcv)
434 {
435     if (!qcv)
436         return NULL;
437 
438     qcv->Use++;
439 
440     return qcv;
441 }
442 
443 
444 
445 
446 /* @section destructors *******************************************************
447 **
448 ** Destruction destroys all internal data structures and frees the memory
449 ** allocated for an Ensembl Quality Check Variation object.
450 **
451 ** @fdata [EnsPQcvariation]
452 **
453 ** @nam3rule Del Destroy (free) an Ensembl Quality Check Variation
454 **
455 ** @argrule * Pqcv [EnsPQcvariation*] Ensembl Quality Check Variation address
456 **
457 ** @valrule * [void]
458 **
459 ** @fcategory delete
460 ******************************************************************************/
461 
462 
463 
464 
465 /* @func ensQcvariationDel ****************************************************
466 **
467 ** Default destructor for an Ensembl Quality Check Variation.
468 **
469 ** @param [d] Pqcv [EnsPQcvariation*] Ensembl Quality Check Variation address
470 **
471 ** @return [void]
472 **
473 ** @release 6.2.0
474 ** @@
475 ******************************************************************************/
476 
ensQcvariationDel(EnsPQcvariation * Pqcv)477 void ensQcvariationDel(EnsPQcvariation *Pqcv)
478 {
479     EnsPQcvariation pthis = NULL;
480 
481     if (!Pqcv)
482         return;
483 
484 #if defined(AJ_DEBUG) && AJ_DEBUG >= 1
485     if (ajDebugTest("ensQcvariationDel"))
486     {
487         ajDebug("ensQcvariationDel\n"
488                 "  *Pqcv %p\n",
489                 *Pqcv);
490 
491         ensQcvariationTrace(*Pqcv, 1);
492     }
493 #endif /* defined(AJ_DEBUG) && AJ_DEBUG >= 1 */
494 
495     if (!(pthis = *Pqcv) || --pthis->Use)
496     {
497         *Pqcv = NULL;
498 
499         return;
500     }
501 
502     ensQcalignmentDel(&pthis->Qcalignment);
503 
504     ensAnalysisDel(&pthis->Analysis);
505 
506     ensQcsequenceDel(&pthis->QuerySequence);
507     ensQcsequenceDel(&pthis->TargetSequence);
508 
509     ajStrDel(&pthis->QueryString);
510     ajStrDel(&pthis->TargetString);
511 
512     ajMemFree((void **) Pqcv);
513 
514     return;
515 }
516 
517 
518 
519 
520 /* @section member retrieval **************************************************
521 **
522 ** Functions for returning members of an
523 ** Ensembl Quality Check Variation object.
524 **
525 ** @fdata [EnsPQcvariation]
526 **
527 ** @nam3rule Get Return Quality Check Variation attribute(s)
528 ** @nam4rule Adaptor Return the Ensembl Quality Check Variation Adaptor
529 ** @nam4rule Analysis Return the Ensembl Analysis
530 ** @nam4rule Class Return the class
531 ** @nam4rule Identifier Return the SQL database-internal identifier
532 ** @nam4rule Qcalignment Return the Ensembl Quality Check Alignment
533 ** @nam4rule Query Return query members
534 ** @nam5rule End Return the query end
535 ** @nam5rule Sequence Return the query Ensembl Quality Check Sequence
536 ** @nam5rule Start Return the query start
537 ** @nam5rule String Return the query string
538 ** @nam4rule State Return the state
539 ** @nam4rule Target Return target members
540 ** @nam5rule Sequence Return the target Ensembl Quality Check Sequence
541 ** @nam5rule Start Return the target start
542 ** @nam5rule End Return the target end
543 ** @nam5rule String Return the target string
544 ** @nam4rule Type Return the type
545 **
546 ** @argrule * qcv [const EnsPQcvariation] Ensembl Quality Check Variation
547 **
548 ** @valrule Adaptor [EnsPQcvariationadaptor]
549 ** Ensembl Quality Check Variation Adaptor or NULL
550 ** @valrule Analysis [EnsPAnalysis] Ensembl Analysis or NULL
551 ** @valrule Class [EnsEQcvariationClass] Class or ensEQcvariationClassNULL
552 ** @valrule Identifier [ajuint] SQL database-internal identifier or 0U
553 ** @valrule Qcalignment [EnsPQcalignment]
554 ** Ensembl Quality Check Alignment or NULL
555 ** @valrule QueryEnd [ajuint] Query end or 0U
556 ** @valrule QuerySequence [EnsPQcsequence]
557 ** Query Ensembl Quality Check Sequence or NULL
558 ** @valrule QueryStart [ajuint] Query start or 0U
559 ** @valrule QueryString [AjPStr] Query string or NULL
560 ** @valrule State [EnsEQcvariationState] State or ensEQcvariationStateNULL
561 ** @valrule TargetSequence [EnsPQcsequence]
562 ** Target Ensembl Quality Check Sequence or NULL
563 ** @valrule TargetStart [ajuint] Target start or 0U
564 ** @valrule TargetEnd [ajuint] Target end or 0U
565 ** @valrule TargetString [AjPStr] Target string or NULL
566 ** @valrule Type [EnsEQcvariationType] Type or ensEQcvariationTypeNULL
567 **
568 ** @fcategory use
569 ******************************************************************************/
570 
571 
572 
573 
574 /* @func ensQcvariationGetAdaptor *********************************************
575 **
576 ** Get the Ensembl Quality Check Variation Adaptor member of an
577 ** Ensembl Quality Check Variation.
578 **
579 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
580 **
581 ** @return [EnsPQcvariationadaptor] Ensembl Quality Check Variation Adaptor
582 ** or NULL
583 **
584 ** @release 6.2.0
585 ** @@
586 ******************************************************************************/
587 
ensQcvariationGetAdaptor(const EnsPQcvariation qcv)588 EnsPQcvariationadaptor ensQcvariationGetAdaptor(const EnsPQcvariation qcv)
589 {
590     return (qcv) ? qcv->Adaptor : NULL;
591 }
592 
593 
594 
595 
596 /* @func ensQcvariationGetAnalysis ********************************************
597 **
598 ** Get the Ensembl Analysis member of an Ensembl Quality Check Variation.
599 **
600 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
601 **
602 ** @return [EnsPAnalysis] Ensembl Analysis or NULL
603 **
604 ** @release 6.2.0
605 ** @@
606 ******************************************************************************/
607 
ensQcvariationGetAnalysis(const EnsPQcvariation qcv)608 EnsPAnalysis ensQcvariationGetAnalysis(const EnsPQcvariation qcv)
609 {
610     return (qcv) ? qcv->Analysis : NULL;
611 }
612 
613 
614 
615 
616 /* @func ensQcvariationGetClass ***********************************************
617 **
618 ** Get the class member of an Ensembl Quality Check Variation.
619 **
620 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
621 **
622 ** @return [EnsEQcvariationClass] Class or ensEQcvariationClassNULL
623 **
624 ** @release 6.2.0
625 ** @@
626 ******************************************************************************/
627 
ensQcvariationGetClass(const EnsPQcvariation qcv)628 EnsEQcvariationClass ensQcvariationGetClass(const EnsPQcvariation qcv)
629 {
630     return (qcv) ? qcv->Class : ensEQcvariationClassNULL;
631 }
632 
633 
634 
635 
636 /* @func ensQcvariationGetIdentifier ******************************************
637 **
638 ** Get the SQL database-internal identifier member of an
639 ** Ensembl Quality Check Variation.
640 **
641 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
642 **
643 ** @return [ajuint] SQL database-internal identifier or 0U
644 **
645 ** @release 6.2.0
646 ** @@
647 ******************************************************************************/
648 
ensQcvariationGetIdentifier(const EnsPQcvariation qcv)649 ajuint ensQcvariationGetIdentifier(const EnsPQcvariation qcv)
650 {
651     return (qcv) ? qcv->Identifier : 0U;
652 }
653 
654 
655 
656 
657 /* @func ensQcvariationGetQcalignment *****************************************
658 **
659 ** Get the Ensembl Quality Check Alignment member of an
660 ** Ensembl Quality Check Variation.
661 **
662 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
663 **
664 ** @return [EnsPQcalignment] Ensembl Quality Check Alignment or NULL
665 **
666 ** @release 6.2.0
667 ** @@
668 ******************************************************************************/
669 
ensQcvariationGetQcalignment(const EnsPQcvariation qcv)670 EnsPQcalignment ensQcvariationGetQcalignment(const EnsPQcvariation qcv)
671 {
672     return (qcv) ? qcv->Qcalignment : NULL;
673 }
674 
675 
676 
677 
678 /* @func ensQcvariationGetQueryEnd ********************************************
679 **
680 ** Get the query end member of an Ensembl Quality Check Variation.
681 **
682 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
683 **
684 ** @return [ajuint] Query end or 0U
685 **
686 ** @release 6.2.0
687 ** @@
688 ******************************************************************************/
689 
ensQcvariationGetQueryEnd(const EnsPQcvariation qcv)690 ajuint ensQcvariationGetQueryEnd(const EnsPQcvariation qcv)
691 {
692     return (qcv) ? qcv->QueryEnd : 0U;
693 }
694 
695 
696 
697 
698 /* @func ensQcvariationGetQuerySequence ***************************************
699 **
700 ** Get the query Ensembl Quality Check Sequence member of an
701 ** Ensembl Quality Check Variation.
702 **
703 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
704 **
705 ** @return [EnsPQcsequence] Query Ensembl Quality Check Sequence or NULL
706 **
707 ** @release 6.2.0
708 ** @@
709 ******************************************************************************/
710 
ensQcvariationGetQuerySequence(const EnsPQcvariation qcv)711 EnsPQcsequence ensQcvariationGetQuerySequence(const EnsPQcvariation qcv)
712 {
713     return (qcv) ? qcv->QuerySequence : NULL;
714 }
715 
716 
717 
718 
719 /* @func ensQcvariationGetQueryStart ******************************************
720 **
721 ** Get the query start member of an Ensembl Quality Check Variation.
722 **
723 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
724 **
725 ** @return [ajuint] Query start or 0U
726 **
727 ** @release 6.2.0
728 ** @@
729 ******************************************************************************/
730 
ensQcvariationGetQueryStart(const EnsPQcvariation qcv)731 ajuint ensQcvariationGetQueryStart(const EnsPQcvariation qcv)
732 {
733     return (qcv) ? qcv->QueryStart : 0U;
734 }
735 
736 
737 
738 
739 /* @func ensQcvariationGetQueryString *****************************************
740 **
741 ** Get the query string member of an Ensembl Quality Check Variation.
742 **
743 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
744 **
745 ** @return [AjPStr] Query string or NULL
746 **
747 ** @release 6.2.0
748 ** @@
749 ******************************************************************************/
750 
ensQcvariationGetQueryString(const EnsPQcvariation qcv)751 AjPStr ensQcvariationGetQueryString(const EnsPQcvariation qcv)
752 {
753     return (qcv) ? qcv->QueryString : NULL;
754 }
755 
756 
757 
758 
759 /* @func ensQcvariationGetState ***********************************************
760 **
761 ** Get the state member of an Ensembl Quality Check Variation.
762 **
763 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
764 **
765 ** @return [EnsEQcvariationState] State or ensEQcvariationStateNULL
766 **
767 ** @release 6.2.0
768 ** @@
769 ******************************************************************************/
770 
ensQcvariationGetState(const EnsPQcvariation qcv)771 EnsEQcvariationState ensQcvariationGetState(const EnsPQcvariation qcv)
772 {
773     return (qcv) ? qcv->State : ensEQcvariationStateNULL;
774 }
775 
776 
777 
778 
779 /* @func ensQcvariationGetTargetEnd *******************************************
780 **
781 ** Get the target end member of an Ensembl Quality Check Variation.
782 **
783 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
784 **
785 ** @return [ajuint] Target end or 0U
786 **
787 ** @release 6.2.0
788 ** @@
789 ******************************************************************************/
790 
ensQcvariationGetTargetEnd(const EnsPQcvariation qcv)791 ajuint ensQcvariationGetTargetEnd(const EnsPQcvariation qcv)
792 {
793     return (qcv) ? qcv->TargetEnd : 0U;
794 }
795 
796 
797 
798 
799 /* @func ensQcvariationGetTargetSequence **************************************
800 **
801 ** Get the target Ensembl Quality Check Sequence member of an
802 ** Ensembl Quality Check Variation.
803 **
804 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
805 **
806 ** @return [EnsPQcsequence] Target Ensembl Quality Check Sequence or NULL
807 **
808 ** @release 6.2.0
809 ** @@
810 ******************************************************************************/
811 
ensQcvariationGetTargetSequence(const EnsPQcvariation qcv)812 EnsPQcsequence ensQcvariationGetTargetSequence(const EnsPQcvariation qcv)
813 {
814     return (qcv) ? qcv->TargetSequence : NULL;
815 }
816 
817 
818 
819 
820 /* @func ensQcvariationGetTargetStart *****************************************
821 **
822 ** Get the target start member of an Ensembl Quality Check Variation.
823 **
824 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
825 **
826 ** @return [ajuint] Target start or 0U
827 **
828 ** @release 6.2.0
829 ** @@
830 ******************************************************************************/
831 
ensQcvariationGetTargetStart(const EnsPQcvariation qcv)832 ajuint ensQcvariationGetTargetStart(const EnsPQcvariation qcv)
833 {
834     return (qcv) ? qcv->TargetStart : 0U;
835 }
836 
837 
838 
839 
840 /* @func ensQcvariationGetTargetString ****************************************
841 **
842 ** Get the target string member of an Ensembl Quality Check Variation.
843 **
844 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
845 **
846 ** @return [AjPStr] Target string or NULL
847 **
848 ** @release 6.2.0
849 ** @@
850 ******************************************************************************/
851 
ensQcvariationGetTargetString(const EnsPQcvariation qcv)852 AjPStr ensQcvariationGetTargetString(const EnsPQcvariation qcv)
853 {
854     return (qcv) ? qcv->TargetString : NULL;
855 }
856 
857 
858 
859 
860 /* @func ensQcvariationGetType ************************************************
861 **
862 ** Get the type member of an Ensembl Quality Check Variation.
863 **
864 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
865 **
866 ** @return [EnsEQcvariationType] Type or ensEQcvariationTypeNULL
867 **
868 ** @release 6.2.0
869 ** @@
870 ******************************************************************************/
871 
ensQcvariationGetType(const EnsPQcvariation qcv)872 EnsEQcvariationType ensQcvariationGetType(const EnsPQcvariation qcv)
873 {
874     return (qcv) ? qcv->Type : ensEQcvariationTypeNULL;
875 }
876 
877 
878 
879 
880 /* @section modifiers *********************************************************
881 **
882 ** Functions for assigning members of an
883 ** Ensembl Quality Check Variation object.
884 **
885 ** @fdata [EnsPQcvariation]
886 **
887 ** @nam3rule Set Set one member of a Quality Check Variation
888 ** @nam4rule Adaptor Set the Ensembl Quality Check Variation Adaptor
889 ** @nam4rule Analysis Set the Ensembl Analysis
890 ** @nam4rule Class Set the class
891 ** @nam4rule Identifier Set the SQL database-internal identifier
892 ** @nam4rule Qcalignment Set the Ensembl Quality Check Alignment
893 ** @nam4rule Query Set query members
894 ** @nam5rule End Set the query end
895 ** @nam5rule Sequence Set the query Ensembl Quality Check Sequence
896 ** @nam5rule Start Set the query start
897 ** @nam5rule String Set the query string
898 ** @nam4rule State Set the state
899 ** @nam4rule Target Set target members
900 ** @nam5rule End Set the target end
901 ** @nam5rule Sequence Set the target Ensembl Quality Check Sequence
902 ** @nam5rule Start Set the target start
903 ** @nam5rule String Set the target string
904 ** @nam4rule Type Set the type
905 **
906 ** @argrule * qcv [EnsPQcvariation] Ensembl Quality Check Variation
907 ** @argrule Adaptor qcva [EnsPQcvariationadaptor]
908 ** Ensembl Quality Check Variation Adaptor
909 ** @argrule Analysis analysis [EnsPAnalysis] Ensembl Analysis
910 ** @argrule Class class [EnsEQcvariationClass] Class
911 ** @argrule Identifier identifier [ajuint] SQL database-internal identifier
912 ** @argrule Qcalignment qca [EnsPQcalignment] Ensembl Quality Check Alignment
913 ** @argrule QueryEnd qend [ajuint] Query end
914 ** @argrule QuerySequence qsequence [EnsPQcsequence]
915 ** Query Ensembl Quality Check Sequence
916 ** @argrule QueryStart qstart [ajuint] Query start
917 ** @argrule QueryString qstring [AjPStr] Query string
918 ** @argrule TargetEnd tend [ajuint] Target end
919 ** @argrule TargetSequence tsequence [EnsPQcsequence]
920 ** Target Ensembl Quality Check Sequence
921 ** @argrule TargetStart tstart [ajuint] Target start
922 ** @argrule TargetString tstring [AjPStr] Target string
923 ** @argrule Type type [EnsEQcvariationType] Type
924 ** @argrule State state [EnsEQcvariationState] State
925 **
926 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
927 **
928 ** @fcategory modify
929 ******************************************************************************/
930 
931 
932 
933 
934 /* @func ensQcvariationSetAdaptor *********************************************
935 **
936 ** Set the Ensembl Database Adaptor member of an
937 ** Ensembl Quality Check Variation.
938 **
939 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
940 ** @param [u] qcva [EnsPQcvariationadaptor]
941 ** Ensembl Quality Check Variation Adaptor
942 **
943 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
944 **
945 ** @release 6.2.0
946 ** @@
947 ******************************************************************************/
948 
ensQcvariationSetAdaptor(EnsPQcvariation qcv,EnsPQcvariationadaptor qcva)949 AjBool ensQcvariationSetAdaptor(EnsPQcvariation qcv,
950                                 EnsPQcvariationadaptor qcva)
951 {
952     if (!qcv)
953         return ajFalse;
954 
955     qcv->Adaptor = qcva;
956 
957     return ajTrue;
958 }
959 
960 
961 
962 
963 /* @func ensQcvariationSetAnalysis ********************************************
964 **
965 ** Set the Ensembl Analysis member of an Ensembl Quality Check Variation.
966 **
967 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
968 ** @param [u] analysis [EnsPAnalysis] Ensembl Analysis
969 **
970 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
971 **
972 ** @release 6.2.0
973 ** @@
974 ******************************************************************************/
975 
ensQcvariationSetAnalysis(EnsPQcvariation qcv,EnsPAnalysis analysis)976 AjBool ensQcvariationSetAnalysis(EnsPQcvariation qcv,
977                                  EnsPAnalysis analysis)
978 {
979     if (!qcv)
980         return ajFalse;
981 
982     ensAnalysisDel(&qcv->Analysis);
983 
984     qcv->Analysis = ensAnalysisNewRef(analysis);
985 
986     return ajTrue;
987 }
988 
989 
990 
991 
992 /* @func ensQcvariationSetClass ***********************************************
993 **
994 ** Set the class member of an Ensembl Quality Check Variation.
995 **
996 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
997 ** @param [u] class [EnsEQcvariationClass] Class
998 **
999 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1000 **
1001 ** @release 6.2.0
1002 ** @@
1003 ******************************************************************************/
1004 
ensQcvariationSetClass(EnsPQcvariation qcv,EnsEQcvariationClass class)1005 AjBool ensQcvariationSetClass(EnsPQcvariation qcv,
1006                               EnsEQcvariationClass class)
1007 {
1008     if (!qcv)
1009         return ajFalse;
1010 
1011     qcv->Class = class;
1012 
1013     return ajTrue;
1014 }
1015 
1016 
1017 
1018 
1019 /* @func ensQcvariationSetIdentifier ******************************************
1020 **
1021 ** Set the SQL database-internal identifier member of an
1022 ** Ensembl Quality Check Variation.
1023 **
1024 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1025 ** @param [r] identifier [ajuint] SQL database-internal identifier
1026 **
1027 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1028 **
1029 ** @release 6.2.0
1030 ** @@
1031 ******************************************************************************/
1032 
ensQcvariationSetIdentifier(EnsPQcvariation qcv,ajuint identifier)1033 AjBool ensQcvariationSetIdentifier(EnsPQcvariation qcv,
1034                                    ajuint identifier)
1035 {
1036     if (!qcv)
1037         return ajFalse;
1038 
1039     qcv->Identifier = identifier;
1040 
1041     return ajTrue;
1042 }
1043 
1044 
1045 
1046 
1047 /* @func ensQcvariationSetQcalignment *****************************************
1048 **
1049 ** Set the Ensembl Quality Check Alignment member of an
1050 ** Ensembl Quality Check Variation.
1051 **
1052 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1053 ** @param [u] qca [EnsPQcalignment] Ensembl Quality Check Alignment
1054 **
1055 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1056 **
1057 ** @release 6.2.0
1058 ** @@
1059 ******************************************************************************/
1060 
ensQcvariationSetQcalignment(EnsPQcvariation qcv,EnsPQcalignment qca)1061 AjBool ensQcvariationSetQcalignment(EnsPQcvariation qcv,
1062                                     EnsPQcalignment qca)
1063 {
1064     if (!qcv)
1065         return ajFalse;
1066 
1067     ensQcalignmentDel(&qcv->Qcalignment);
1068 
1069     qcv->Qcalignment = ensQcalignmentNewRef(qca);
1070 
1071     return ajTrue;
1072 }
1073 
1074 
1075 
1076 
1077 /* @func ensQcvariationSetQueryEnd ********************************************
1078 **
1079 ** Set the query end member of an Ensembl Quality Check Variation.
1080 **
1081 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1082 ** @param [r] qend [ajuint] Query end
1083 **
1084 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1085 **
1086 ** @release 6.2.0
1087 ** @@
1088 ******************************************************************************/
1089 
ensQcvariationSetQueryEnd(EnsPQcvariation qcv,ajuint qend)1090 AjBool ensQcvariationSetQueryEnd(EnsPQcvariation qcv,
1091                                  ajuint qend)
1092 {
1093     if (!qcv)
1094         return ajFalse;
1095 
1096     qcv->QueryEnd = qend;
1097 
1098     return ajTrue;
1099 }
1100 
1101 
1102 
1103 
1104 /* @func ensQcvariationSetQuerySequence ***************************************
1105 **
1106 ** Set the query Ensembl Quality Check Sequence member of an
1107 ** Ensembl Quality Check Variation.
1108 **
1109 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1110 ** @param [u] qsequence [EnsPQcsequence] Ensembl Quality Check Sequence
1111 **
1112 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1113 **
1114 ** @release 6.2.0
1115 ** @@
1116 ******************************************************************************/
1117 
ensQcvariationSetQuerySequence(EnsPQcvariation qcv,EnsPQcsequence qsequence)1118 AjBool ensQcvariationSetQuerySequence(EnsPQcvariation qcv,
1119                                       EnsPQcsequence qsequence)
1120 {
1121     if (!qcv)
1122         return ajFalse;
1123 
1124     ensQcsequenceDel(&qcv->QuerySequence);
1125 
1126     qcv->QuerySequence = ensQcsequenceNewRef(qsequence);
1127 
1128     return ajTrue;
1129 }
1130 
1131 
1132 
1133 
1134 /* @func ensQcvariationSetQueryStart ******************************************
1135 **
1136 ** Set the query start member of an Ensembl Quality Check Variation.
1137 **
1138 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1139 ** @param [r] qstart [ajuint] Query start
1140 **
1141 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1142 **
1143 ** @release 6.2.0
1144 ** @@
1145 ******************************************************************************/
1146 
ensQcvariationSetQueryStart(EnsPQcvariation qcv,ajuint qstart)1147 AjBool ensQcvariationSetQueryStart(EnsPQcvariation qcv,
1148                                    ajuint qstart)
1149 {
1150     if (!qcv)
1151         return ajFalse;
1152 
1153     qcv->QueryStart = qstart;
1154 
1155     return ajTrue;
1156 }
1157 
1158 
1159 
1160 
1161 /* @func ensQcvariationSetQueryString *****************************************
1162 **
1163 ** Set the query string member of an Ensembl Quality Check Variation.
1164 **
1165 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1166 ** @param [u] qstring [AjPStr] Query string
1167 **
1168 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1169 **
1170 ** @release 6.2.0
1171 ** @@
1172 ******************************************************************************/
1173 
ensQcvariationSetQueryString(EnsPQcvariation qcv,AjPStr qstring)1174 AjBool ensQcvariationSetQueryString(EnsPQcvariation qcv,
1175                                     AjPStr qstring)
1176 {
1177     if (!qcv)
1178         return ajFalse;
1179 
1180     ajStrDel(&qcv->QueryString);
1181 
1182     if (qcv->QueryString)
1183         qcv->QueryString = ajStrNewRef(qstring);
1184 
1185     return ajTrue;
1186 }
1187 
1188 
1189 
1190 
1191 /* @func ensQcvariationSetState ***********************************************
1192 **
1193 ** Set the state member of an Ensembl Quality Check Variation.
1194 **
1195 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1196 ** @param [u] state [EnsEQcvariationState] State
1197 **
1198 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1199 **
1200 ** @release 6.2.0
1201 ** @@
1202 ******************************************************************************/
1203 
ensQcvariationSetState(EnsPQcvariation qcv,EnsEQcvariationState state)1204 AjBool ensQcvariationSetState(EnsPQcvariation qcv,
1205                               EnsEQcvariationState state)
1206 {
1207     if (!qcv)
1208         return ajFalse;
1209 
1210     qcv->State = state;
1211 
1212     return ajTrue;
1213 }
1214 
1215 
1216 
1217 
1218 /* @func ensQcvariationSetTargetEnd *******************************************
1219 **
1220 ** Set the target end member of an Ensembl Quality Check Variation.
1221 **
1222 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1223 ** @param [r] tend [ajuint] Target end
1224 **
1225 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1226 **
1227 ** @release 6.2.0
1228 ** @@
1229 ******************************************************************************/
1230 
ensQcvariationSetTargetEnd(EnsPQcvariation qcv,ajuint tend)1231 AjBool ensQcvariationSetTargetEnd(EnsPQcvariation qcv,
1232                                   ajuint tend)
1233 {
1234     if (!qcv)
1235         return ajFalse;
1236 
1237     qcv->TargetEnd = tend;
1238 
1239     return ajTrue;
1240 }
1241 
1242 
1243 
1244 
1245 /* @func ensQcvariationSetTargetSequence **************************************
1246 **
1247 ** Set the target Ensembl Quality Check Sequence member of an
1248 ** Ensembl Quality Check Variation.
1249 **
1250 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1251 ** @param [u] tsequence [EnsPQcsequence] Ensembl Quality Check Sequence
1252 **
1253 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1254 **
1255 ** @release 6.2.0
1256 ** @@
1257 ******************************************************************************/
1258 
ensQcvariationSetTargetSequence(EnsPQcvariation qcv,EnsPQcsequence tsequence)1259 AjBool ensQcvariationSetTargetSequence(EnsPQcvariation qcv,
1260                                        EnsPQcsequence tsequence)
1261 {
1262     if (!qcv)
1263         return ajFalse;
1264 
1265     ensQcsequenceDel(&qcv->TargetSequence);
1266 
1267     qcv->TargetSequence = ensQcsequenceNewRef(tsequence);
1268 
1269     return ajTrue;
1270 }
1271 
1272 
1273 
1274 
1275 /* @func ensQcvariationSetTargetStart *****************************************
1276 **
1277 ** Set the target start member of an Ensembl Quality Check Variation.
1278 **
1279 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1280 ** @param [r] tstart [ajuint] Target start
1281 **
1282 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1283 **
1284 ** @release 6.2.0
1285 ** @@
1286 ******************************************************************************/
1287 
ensQcvariationSetTargetStart(EnsPQcvariation qcv,ajuint tstart)1288 AjBool ensQcvariationSetTargetStart(EnsPQcvariation qcv,
1289                                     ajuint tstart)
1290 {
1291     if (!qcv)
1292         return ajFalse;
1293 
1294     qcv->TargetStart = tstart;
1295 
1296     return ajTrue;
1297 }
1298 
1299 
1300 
1301 
1302 /* @func ensQcvariationSetTargetString ****************************************
1303 **
1304 ** Set the target string member of an Ensembl Quality Check Variation.
1305 **
1306 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1307 ** @param [u] tstring [AjPStr] Target string
1308 **
1309 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1310 **
1311 ** @release 6.2.0
1312 ** @@
1313 ******************************************************************************/
1314 
ensQcvariationSetTargetString(EnsPQcvariation qcv,AjPStr tstring)1315 AjBool ensQcvariationSetTargetString(EnsPQcvariation qcv,
1316                                      AjPStr tstring)
1317 {
1318     if (!qcv)
1319         return ajFalse;
1320 
1321     ajStrDel(&qcv->TargetString);
1322 
1323     if (tstring)
1324         qcv->TargetString = ajStrNewRef(tstring);
1325 
1326     return ajTrue;
1327 }
1328 
1329 
1330 
1331 
1332 /* @func ensQcvariationSetType ************************************************
1333 **
1334 ** Set the type member of an Ensembl Quality Check Variation.
1335 **
1336 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
1337 ** @param [u] type [EnsEQcvariationType] Type
1338 **
1339 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1340 **
1341 ** @release 6.2.0
1342 ** @@
1343 ******************************************************************************/
1344 
ensQcvariationSetType(EnsPQcvariation qcv,EnsEQcvariationType type)1345 AjBool ensQcvariationSetType(EnsPQcvariation qcv,
1346                              EnsEQcvariationType type)
1347 {
1348     if (!qcv)
1349         return ajFalse;
1350 
1351     qcv->Type = type;
1352 
1353     return ajTrue;
1354 }
1355 
1356 
1357 
1358 
1359 /* @section debugging *********************************************************
1360 **
1361 ** Functions for reporting of an Ensembl Quality Check Variation object.
1362 **
1363 ** @fdata [EnsPQcvariation]
1364 **
1365 ** @nam3rule Trace Report Quality Check Variation members to debug file
1366 **
1367 ** @argrule Trace qcv [const EnsPQcvariation] Ensembl Quality Check Variation
1368 ** @argrule Trace level [ajuint] Indentation level
1369 **
1370 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
1371 **
1372 ** @fcategory misc
1373 ******************************************************************************/
1374 
1375 
1376 
1377 
1378 /* @func ensQcvariationTrace **************************************************
1379 **
1380 ** Trace an Ensembl Quality Check Variation.
1381 **
1382 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
1383 ** @param [r] level [ajuint] Indentation level
1384 **
1385 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1386 **
1387 ** @release 6.2.0
1388 ** @@
1389 ******************************************************************************/
1390 
ensQcvariationTrace(const EnsPQcvariation qcv,ajuint level)1391 AjBool ensQcvariationTrace(const EnsPQcvariation qcv, ajuint level)
1392 {
1393     AjPStr indent = NULL;
1394 
1395     if (!qcv)
1396         return ajFalse;
1397 
1398     indent = ajStrNew();
1399 
1400     ajStrAppendCountK(&indent, ' ', level * 2);
1401 
1402     ajDebug("%SensQcvariationTrace %p\n"
1403             "%S  Use %u\n"
1404             "%S  Identifier %u\n"
1405             "%S  Adaptor %p\n"
1406             "%S  Qcalignment %p\n"
1407             "%S  Analysis %p\n"
1408             "%S  QuerySequence %p\n"
1409             "%S  QueryStart %u\n"
1410             "%S  QueryEnd %u\n"
1411             "%S  QueryString '%S'\n"
1412             "%S  TargetSequence %p\n"
1413             "%S  TargetStart %u\n"
1414             "%S  TargetEnd %u\n"
1415             "%S  TargetString '%S'\n"
1416             "%S  Class '%s'\n"
1417             "%S  Type '%s'\n"
1418             "%S  State '%s'\n",
1419             indent, qcv,
1420             indent, qcv->Use,
1421             indent, qcv->Identifier,
1422             indent, qcv->Adaptor,
1423             indent, qcv->Qcalignment,
1424             indent, qcv->Analysis,
1425             indent, qcv->QuerySequence,
1426             indent, qcv->QueryStart,
1427             indent, qcv->QueryEnd,
1428             indent, qcv->QueryString,
1429             indent, qcv->TargetSequence,
1430             indent, qcv->TargetStart,
1431             indent, qcv->TargetEnd,
1432             indent, qcv->TargetString,
1433             indent, ensQcvariationClassToChar(qcv->Class),
1434             indent, ensQcvariationTypeToChar(qcv->Type),
1435             indent, ensQcvariationStateToChar(qcv->State));
1436 
1437     ensQcalignmentTrace(qcv->Qcalignment, level + 1);
1438 
1439     ensAnalysisTrace(qcv->Analysis, level + 1);
1440 
1441     ensQcsequenceTrace(qcv->QuerySequence, level + 1);
1442     ensQcsequenceTrace(qcv->TargetSequence, level + 1);
1443 
1444     ajStrDel(&indent);
1445 
1446     return ajTrue;
1447 }
1448 
1449 
1450 
1451 
1452 /* @section calculate *********************************************************
1453 **
1454 ** Functions for calculating information from an
1455 ** Ensembl Quality Check Variation object.
1456 **
1457 ** @fdata [EnsPQcvariation]
1458 **
1459 ** @nam3rule Calculate Calculate Ensembl Quality Check Variation information
1460 ** @nam4rule Memsize Calculate the memory size in bytes
1461 **
1462 ** @argrule * qcv [const EnsPQcvariation] Ensembl Quality Check Variation
1463 **
1464 ** @valrule Memsize [size_t] Memory size in bytes or 0
1465 **
1466 ** @fcategory misc
1467 ******************************************************************************/
1468 
1469 
1470 
1471 
1472 /* @func ensQcvariationCalculateMemsize ***************************************
1473 **
1474 ** Calculate the memory size in bytes of an Ensembl Quality Check Variation.
1475 **
1476 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
1477 **
1478 ** @return [size_t] Memory size in bytes or 0
1479 **
1480 ** @release 6.4.0
1481 ** @@
1482 ******************************************************************************/
1483 
ensQcvariationCalculateMemsize(const EnsPQcvariation qcv)1484 size_t ensQcvariationCalculateMemsize(const EnsPQcvariation qcv)
1485 {
1486     size_t size = 0;
1487 
1488     if (!qcv)
1489         return 0;
1490 
1491     size += sizeof (EnsOQcvariation);
1492 
1493     size += ensQcalignmentCalculateMemsize(qcv->Qcalignment);
1494 
1495     size += ensAnalysisCalculateMemsize(qcv->Analysis);
1496 
1497     size += ensQcsequenceCalculateMemsize(qcv->QuerySequence);
1498     size += ensQcsequenceCalculateMemsize(qcv->TargetSequence);
1499 
1500     if (qcv->QueryString)
1501     {
1502         size += sizeof (AjOStr);
1503 
1504         size += ajStrGetRes(qcv->QueryString);
1505     }
1506 
1507     if (qcv->TargetString)
1508     {
1509         size += sizeof (AjOStr);
1510 
1511         size += ajStrGetRes(qcv->TargetString);
1512     }
1513 
1514     return size;
1515 }
1516 
1517 
1518 
1519 
1520 /* @datasection [EnsEQcvariationClass] Ensembl Quality Check Variation Class
1521 ** enumeration
1522 **
1523 ** @nam2rule Qcvariation Functions for manipulating
1524 ** Ensembl Quality Check Variation objects
1525 ** @nam3rule QcvariationClass Functions for manipulating
1526 ** Ensembl Quality Check Variation Class enumerations
1527 **
1528 ******************************************************************************/
1529 
1530 
1531 
1532 
1533 /* @section Misc **************************************************************
1534 **
1535 ** Functions for returning an
1536 ** Ensembl Quality Check Variation Class enumeration.
1537 **
1538 ** @fdata [EnsEQcvariationClass]
1539 **
1540 ** @nam4rule From Ensembl Quality Check Variation Class query
1541 ** @nam5rule Str  AJAX String object query
1542 **
1543 ** @argrule  Str  vclass  [const AjPStr] Class string
1544 **
1545 ** @valrule * [EnsEQcvariationClass]
1546 ** Ensembl Quality Check Variation Class enumeration or
1547 ** ensEQcvariationClassNULL
1548 **
1549 ** @fcategory misc
1550 ******************************************************************************/
1551 
1552 
1553 
1554 
1555 /* @func ensQcvariationClassFromStr *******************************************
1556 **
1557 ** Convert an AJAX String into an
1558 ** Ensembl Quality Check Variation Class enumeration.
1559 **
1560 ** @param [r] vclass [const AjPStr] Class string
1561 **
1562 ** @return [EnsEQcvariationClass]
1563 ** Ensembl Quality Check Variation Class enumeration or
1564 ** ensEQcvariationClassNULL
1565 **
1566 ** @release 6.2.0
1567 ** @@
1568 ******************************************************************************/
1569 
ensQcvariationClassFromStr(const AjPStr vclass)1570 EnsEQcvariationClass ensQcvariationClassFromStr(const AjPStr vclass)
1571 {
1572     register EnsEQcvariationClass i = ensEQcvariationClassNULL;
1573 
1574     EnsEQcvariationClass eclass = ensEQcvariationClassNULL;
1575 
1576     for (i = ensEQcvariationClassNULL;
1577          qcvariationKClass[i];
1578          i++)
1579         if (ajStrMatchCaseC(vclass, qcvariationKClass[i]))
1580             eclass = i;
1581 
1582     if (!eclass)
1583         ajDebug("ensQcvariationClassFromStr encountered "
1584                 "unexpected string '%S'.\n", vclass);
1585 
1586     return eclass;
1587 }
1588 
1589 
1590 
1591 
1592 /* @section Cast **************************************************************
1593 **
1594 ** Functions for returning attributes of an
1595 ** Ensembl Quality Check Variation Class enumeration.
1596 **
1597 ** @fdata [EnsEQcvariationClass]
1598 **
1599 ** @nam4rule To   Return Ensembl Quality Check Variation Class enumeration
1600 ** @nam5rule Char Return C character string value
1601 **
1602 ** @argrule To qcvc [EnsEQcvariationClass]
1603 ** Ensembl Quality Check Variation Class enumeration
1604 **
1605 ** @valrule Char [const char*] Class or NULL
1606 **
1607 ** @fcategory cast
1608 ******************************************************************************/
1609 
1610 
1611 
1612 
1613 /* @func ensQcvariationClassToChar ********************************************
1614 **
1615 ** Convert an Ensembl Quality Check Variation Class enumeration into a
1616 ** C-type (char *) string.
1617 **
1618 ** @param [u] qcvc [EnsEQcvariationClass]
1619 ** Ensembl Quality Check Variation Class enumeration
1620 **
1621 ** @return [const char*]
1622 ** Ensembl Quality Check Variation Class C-type (char *) string
1623 **
1624 ** @release 6.2.0
1625 ** @@
1626 ******************************************************************************/
1627 
ensQcvariationClassToChar(EnsEQcvariationClass qcvc)1628 const char* ensQcvariationClassToChar(EnsEQcvariationClass qcvc)
1629 {
1630     register EnsEQcvariationClass i = ensEQcvariationClassNULL;
1631 
1632     for (i = ensEQcvariationClassNULL;
1633          qcvariationKClass[i] && (i < qcvc);
1634          i++);
1635 
1636     if (!qcvariationKClass[i])
1637         ajDebug("ensQcvariationClassToChar "
1638                 "encountered an out of boundary error on "
1639                 "Ensembl Quality Check Variation Class "
1640                 "enumeration %d.\n",
1641                 qcvc);
1642 
1643     return qcvariationKClass[i];
1644 }
1645 
1646 
1647 
1648 
1649 /* @datasection [EnsEQcvariationState] Ensembl Quality Check Variation State
1650 ** enumeration
1651 **
1652 ** @nam2rule Qcvariation Functions for manipulating
1653 ** Ensembl Quality Check Variation objects
1654 ** @nam3rule QcvariationState Functions for manipulating
1655 ** Ensembl Quality Check Variation State enumerations
1656 **
1657 ******************************************************************************/
1658 
1659 
1660 
1661 
1662 /* @section Misc **************************************************************
1663 **
1664 ** Functions for returning an
1665 ** Ensembl Quality Check Variation State enumeration.
1666 **
1667 ** @fdata [EnsEQcvariationState]
1668 **
1669 ** @nam4rule From Ensembl Quality Check Variation State query
1670 ** @nam5rule Str  AJAX String object query
1671 **
1672 ** @argrule  Str  state  [const AjPStr] State string
1673 **
1674 ** @valrule * [EnsEQcvariationState]
1675 ** Ensembl Quality Check Variation State enumeration or
1676 ** ensEQcvariationStateNULL
1677 **
1678 ** @fcategory misc
1679 ******************************************************************************/
1680 
1681 
1682 
1683 
1684 /* @func ensQcvariationStateFromStr *******************************************
1685 **
1686 ** Convert an AJAX String into an
1687 ** Ensembl Quality Check Variation State enumeration.
1688 **
1689 ** @param [r] state [const AjPStr] State string
1690 **
1691 ** @return [EnsEQcvariationState]
1692 ** Ensembl Quality Check Variation State or ensEQcvariationStateNULL
1693 **
1694 ** @release 6.2.0
1695 ** @@
1696 ******************************************************************************/
1697 
ensQcvariationStateFromStr(const AjPStr state)1698 EnsEQcvariationState ensQcvariationStateFromStr(const AjPStr state)
1699 {
1700     register EnsEQcvariationState i = ensEQcvariationStateNULL;
1701 
1702     EnsEQcvariationState estate = ensEQcvariationStateNULL;
1703 
1704     for (i = ensEQcvariationStateNULL;
1705          qcvariationKState[i];
1706          i++)
1707         if (ajStrMatchCaseC(state, qcvariationKState[i]))
1708             estate = i;
1709 
1710     if (!estate)
1711         ajDebug("ensQcvariationStateFromStr encountered "
1712                 "unexpected string '%S'.\n", state);
1713 
1714     return estate;
1715 }
1716 
1717 
1718 
1719 
1720 /* @section Cast **************************************************************
1721 **
1722 ** Functions for returning attributes of an
1723 ** Ensembl Quality Check Variation State enumeration.
1724 **
1725 ** @fdata [EnsEQcvariationState]
1726 **
1727 ** @nam4rule To   Return Ensembl Quality Check Variation State enumeration
1728 ** @nam5rule Char Return C character string value
1729 **
1730 ** @argrule To qcvs [EnsEQcvariationState]
1731 ** Ensembl Quality Check Variation State enumeration
1732 **
1733 ** @valrule Char [const char*] State or NULL
1734 **
1735 ** @fcategory cast
1736 ******************************************************************************/
1737 
1738 
1739 
1740 
1741 /* @func ensQcvariationStateToChar ********************************************
1742 **
1743 ** Convert an Ensembl Quality Check Variation State enumeration into a
1744 ** C-type (char *) string.
1745 **
1746 ** @param [u] qcvs [EnsEQcvariationState] Ensembl Quality Check Variation State
1747 **
1748 ** @return [const char*]
1749 ** Ensembl Quality Check Variation State C-type (char *) string
1750 **
1751 ** @release 6.2.0
1752 ** @@
1753 ******************************************************************************/
1754 
ensQcvariationStateToChar(EnsEQcvariationState qcvs)1755 const char* ensQcvariationStateToChar(EnsEQcvariationState qcvs)
1756 {
1757     register EnsEQcvariationState i = ensEQcvariationStateNULL;
1758 
1759     for (i = ensEQcvariationStateNULL;
1760          qcvariationKState[i] && (i < qcvs);
1761          i++);
1762 
1763     if (!qcvariationKState[i])
1764         ajDebug("ensQcvariationStateToChar "
1765                 "encountered an out of boundary error on "
1766                 "Ensembl Quality Check Variation State "
1767                 "enumeration %d.\n",
1768                 qcvs);
1769 
1770     return qcvariationKState[i];
1771 }
1772 
1773 
1774 
1775 
1776 /* @datasection [EnsEQcvariationType] Ensembl Quality Check Variation Type
1777 ** enumeration
1778 **
1779 ** @nam2rule Qcvariation Functions for manipulating
1780 ** Ensembl Quality Check Variation objects
1781 ** @nam3rule QcvariationType Functions for manipulating
1782 ** Ensembl Quality Check Variation Type enumerations
1783 **
1784 ******************************************************************************/
1785 
1786 
1787 
1788 
1789 /* @section Misc **************************************************************
1790 **
1791 ** Functions for returning an Ensembl Quality Check Variation Type enumeration.
1792 **
1793 ** @fdata [EnsEQcvariationType]
1794 **
1795 ** @nam4rule From Ensembl Quality Check Variation Type query
1796 ** @nam5rule Str  AJAX String object query
1797 **
1798 ** @argrule  Str  type  [const AjPStr] Type string
1799 **
1800 ** @valrule * [EnsEQcvariationType]
1801 ** Ensembl Quality Check Variation Type enumeration or ensEQcvariationTypeNULL
1802 **
1803 ** @fcategory misc
1804 ******************************************************************************/
1805 
1806 
1807 
1808 
1809 /* @func ensQcvariationTypeFromStr ********************************************
1810 **
1811 ** Convert an AJAX String into an
1812 ** Ensembl Quality Check Variation Type enumeration.
1813 **
1814 ** @param [r] type [const AjPStr] Type string
1815 **
1816 ** @return [EnsEQcvariationType]
1817 ** Ensembl Quality Check Variation type or ensEQcvariationTypeNULL
1818 **
1819 ** @release 6.2.0
1820 ** @@
1821 ******************************************************************************/
1822 
ensQcvariationTypeFromStr(const AjPStr type)1823 EnsEQcvariationType ensQcvariationTypeFromStr(const AjPStr type)
1824 {
1825     register EnsEQcvariationType i = ensEQcvariationTypeNULL;
1826 
1827     EnsEQcvariationType etype = ensEQcvariationTypeNULL;
1828 
1829     for (i = ensEQcvariationTypeNULL;
1830          qcvariationKType[i];
1831          i++)
1832         if (ajStrMatchCaseC(type, qcvariationKType[i]))
1833             etype = i;
1834 
1835     if (!etype)
1836         ajDebug("ensQcvariationTypeFromStr encountered "
1837                 "unexpected string '%S'.\n", type);
1838 
1839     return etype;
1840 }
1841 
1842 
1843 
1844 
1845 /* @section Cast **************************************************************
1846 **
1847 ** Functions for returning attributes of an
1848 ** Ensembl Quality Check Variation Type enumeration.
1849 **
1850 ** @fdata [EnsEQcvariationType]
1851 **
1852 ** @nam4rule To   Return Ensembl Quality Check Variation Type enumeration
1853 ** @nam5rule Char Return C character string value
1854 **
1855 ** @argrule To qcvt [EnsEQcvariationType]
1856 ** Ensembl Quality Check Variation Type enumeration
1857 **
1858 ** @valrule Char [const char*] Type or NULL
1859 **
1860 ** @fcategory cast
1861 ******************************************************************************/
1862 
1863 
1864 
1865 
1866 /* @func ensQcvariationTypeToChar *********************************************
1867 **
1868 ** Convert an Ensembl Quality Check Variation Type enumeration into a
1869 ** C-type (char *) string.
1870 **
1871 ** @param [u] qcvt [EnsEQcvariationType]
1872 ** Ensembl Quality Check Variation Type enumeration
1873 **
1874 ** @return [const char*]
1875 ** Ensembl Quality Check Variation type C-type (char *) string
1876 **
1877 ** @release 6.2.0
1878 ** @@
1879 ******************************************************************************/
1880 
ensQcvariationTypeToChar(EnsEQcvariationType qcvt)1881 const char* ensQcvariationTypeToChar(EnsEQcvariationType qcvt)
1882 {
1883     register EnsEQcvariationType i = ensEQcvariationTypeNULL;
1884 
1885     for (i = ensEQcvariationTypeNULL;
1886          qcvariationKType[i] && (i < qcvt);
1887          i++);
1888 
1889     if (!qcvariationKType[i])
1890         ajDebug("ensQcvariationTypeToChar "
1891                 "encountered an out of boundary error on "
1892                 "Ensembl Quality Check Variation Type "
1893                 "enumeration %d.\n",
1894                 qcvt);
1895 
1896     return qcvariationKType[i];
1897 }
1898 
1899 
1900 
1901 
1902 /* @datasection [EnsPQcvariationadaptor] Ensembl Quality Check Variation
1903 ** Adaptor
1904 **
1905 ** @nam2rule Qcvariationadaptor Functions for manipulating
1906 ** Ensembl Quality Check Variation Adaptor objects
1907 **
1908 ** @cc Bio::EnsEMBL::QC::DBSQL::Variationadaptor
1909 ** @cc CVS Revision:
1910 ** @cc CVS Tag:
1911 **
1912 ******************************************************************************/
1913 
1914 
1915 
1916 
1917 /* @funcstatic qcvariationadaptorFetchAllbyStatement **************************
1918 **
1919 ** Run a SQL statement against an Ensembl Database Adaptor and consolidate the
1920 ** results into an AJAX List of Ensembl Quality Check Variation objects.
1921 **
1922 ** @param [u] ba [EnsPBaseadaptor] Ensembl Base Adaptor
1923 ** @param [r] statement [const AjPStr] SQL statement
1924 ** @param [uN] am [EnsPAssemblymapper] Ensembl Assembly Mapper
1925 ** @param [uN] slice [EnsPSlice] Ensembl Slice
1926 ** @param [u] qcvs [AjPList] AJAX List of Ensembl Quality Check Variations
1927 **
1928 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1929 **
1930 ** @release 6.4.0
1931 ** @@
1932 ******************************************************************************/
1933 
qcvariationadaptorFetchAllbyStatement(EnsPBaseadaptor ba,const AjPStr statement,EnsPAssemblymapper am,EnsPSlice slice,AjPList qcvs)1934 static AjBool qcvariationadaptorFetchAllbyStatement(
1935     EnsPBaseadaptor ba,
1936     const AjPStr statement,
1937     EnsPAssemblymapper am,
1938     EnsPSlice slice,
1939     AjPList qcvs)
1940 {
1941     ajuint identifier  = 0U;
1942     ajuint analysisid  = 0U;
1943     ajuint alignmentid = 0U;
1944 
1945     ajuint qdbid  = 0U;
1946     ajuint qsid   = 0U;
1947     ajuint qstart = 0U;
1948     ajuint qend   = 0U;
1949     ajuint tdbid  = 0U;
1950     ajuint tsid   = 0U;
1951     ajuint tstart = 0U;
1952     ajuint tend   = 0U;
1953 
1954     EnsEQcvariationClass eclass = ensEQcvariationClassNULL;
1955     EnsEQcvariationType etype   = ensEQcvariationTypeNULL;
1956     EnsEQcvariationState estate = ensEQcvariationStateNULL;
1957 
1958     AjPSqlstatement sqls = NULL;
1959     AjISqlrow sqli       = NULL;
1960     AjPSqlrow sqlr       = NULL;
1961 
1962     AjPStr qstring = NULL;
1963     AjPStr tstring = NULL;
1964     AjPStr class   = NULL;
1965     AjPStr type    = NULL;
1966     AjPStr state   = NULL;
1967 
1968     EnsPAnalysis analysis  = NULL;
1969     EnsPAnalysisadaptor aa = NULL;
1970 
1971     EnsPDatabaseadaptor dba = NULL;
1972 
1973     EnsPQcalignment qca         = NULL;
1974     EnsPQcalignmentadaptor qcaa = NULL;
1975 
1976     EnsPQcsequence qsequence   = NULL;
1977     EnsPQcsequence tsequence   = NULL;
1978     EnsPQcsequenceadaptor qcsa = NULL;
1979 
1980     EnsPQcvariation qcv         = NULL;
1981     EnsPQcvariationadaptor qcva = NULL;
1982 
1983     if (ajDebugTest("qcvariationadaptorFetchAllbyStatement"))
1984         ajDebug("qcvariationadaptorFetchAllbyStatement\n"
1985                 "  ba %p\n"
1986                 "  statement %p\n"
1987                 "  am %p\n"
1988                 "  slice %p\n"
1989                 "  qcvs %p\n",
1990                 ba,
1991                 statement,
1992                 am,
1993                 slice,
1994                 qcvs);
1995 
1996     if (!ba)
1997         return ajFalse;
1998 
1999     if (!statement)
2000         return ajFalse;
2001 
2002     if (!qcvs)
2003         return ajFalse;
2004 
2005     dba = ensBaseadaptorGetDatabaseadaptor(ba);
2006 
2007     aa   = ensRegistryGetAnalysisadaptor(dba);
2008     qcaa = ensRegistryGetQcalignmentadaptor(dba);
2009     qcva = ensRegistryGetQcvariationadaptor(dba);
2010     qcsa = ensRegistryGetQcsequenceadaptor(dba);
2011 
2012     sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
2013 
2014     sqli = ajSqlrowiterNew(sqls);
2015 
2016     while (!ajSqlrowiterDone(sqli))
2017     {
2018         identifier  = 0;
2019         analysisid  = 0;
2020         alignmentid = 0;
2021         qdbid       = 0;
2022         qsid        = 0;
2023         qstart      = 0;
2024         qend        = 0;
2025         qstring     = ajStrNew();
2026         tdbid       = 0;
2027         tsid        = 0;
2028         tstart      = 0;
2029         tend        = 0;
2030         tstring     = ajStrNew();
2031         class       = ajStrNew();
2032         type        = ajStrNew();
2033         state       = ajStrNew();
2034 
2035         sqlr = ajSqlrowiterGet(sqli);
2036 
2037         ajSqlcolumnToUint(sqlr, &identifier);
2038         ajSqlcolumnToUint(sqlr, &analysisid);
2039         ajSqlcolumnToUint(sqlr, &alignmentid);
2040         ajSqlcolumnToUint(sqlr, &qdbid);
2041         ajSqlcolumnToUint(sqlr, &qsid);
2042         ajSqlcolumnToUint(sqlr, &qstart);
2043         ajSqlcolumnToUint(sqlr, &qend);
2044         ajSqlcolumnToStr(sqlr, &qstring);
2045         ajSqlcolumnToUint(sqlr, &tdbid);
2046         ajSqlcolumnToUint(sqlr, &tsid);
2047         ajSqlcolumnToUint(sqlr, &tstart);
2048         ajSqlcolumnToUint(sqlr, &tend);
2049         ajSqlcolumnToStr(sqlr, &tstring);
2050         ajSqlcolumnToStr(sqlr, &class);
2051         ajSqlcolumnToStr(sqlr, &type);
2052         ajSqlcolumnToStr(sqlr, &state);
2053 
2054         ensQcalignmentadaptorFetchByIdentifier(qcaa, alignmentid, &qca);
2055 
2056         ensAnalysisadaptorFetchByIdentifier(aa, analysisid, &analysis);
2057 
2058         ensQcsequenceadaptorFetchByIdentifier(qcsa, qsid, &qsequence);
2059         ensQcsequenceadaptorFetchByIdentifier(qcsa, tsid, &tsequence);
2060 
2061         eclass = ensQcvariationClassFromStr(class);
2062 
2063         etype = ensQcvariationTypeFromStr(type);
2064 
2065         estate = ensQcvariationStateFromStr(state);
2066 
2067         qcv = ensQcvariationNewIni(qcva,
2068                                    identifier,
2069                                    qca,
2070                                    analysis,
2071                                    qsequence,
2072                                    qstart,
2073                                    qend,
2074                                    qstring,
2075                                    tsequence,
2076                                    tstart,
2077                                    tend,
2078                                    tstring,
2079                                    eclass,
2080                                    etype,
2081                                    estate);
2082 
2083         ajListPushAppend(qcvs, (void *) qcv);
2084 
2085         ensQcsequenceDel(&qsequence);
2086         ensQcsequenceDel(&tsequence);
2087 
2088         ensAnalysisDel(&analysis);
2089 
2090         ensQcalignmentDel(&qca);
2091 
2092         ajStrDel(&qstring);
2093         ajStrDel(&tstring);
2094         ajStrDel(&class);
2095         ajStrDel(&type);
2096         ajStrDel(&state);
2097     }
2098 
2099     ajSqlrowiterDel(&sqli);
2100 
2101     ensDatabaseadaptorSqlstatementDel(dba, &sqls);
2102 
2103     return ajTrue;
2104 }
2105 
2106 
2107 
2108 
2109 /* @section constructors ******************************************************
2110 **
2111 ** All constructors return a new Ensembl Quality Check Variation Adaptor by
2112 ** pointer. It is the responsibility of the user to first destroy any previous
2113 ** Quality Check Variation Adaptor. The target pointer does not need to be
2114 ** initialised to NULL, but it is good programming practice to do so anyway.
2115 **
2116 ** @fdata [EnsPQcvariationadaptor]
2117 **
2118 ** @nam3rule New Constructor
2119 **
2120 ** @argrule New dba [EnsPDatabaseadaptor] Ensembl Database Adaptor
2121 **
2122 ** @valrule * [EnsPQcvariationadaptor]
2123 ** Ensembl Quality Check Variation Adaptor or NULL
2124 **
2125 ** @fcategory new
2126 ******************************************************************************/
2127 
2128 
2129 
2130 
2131 /* @func ensQcvariationadaptorNew *********************************************
2132 **
2133 ** Default constructor for an Ensembl Quality Check Variation Adaptor.
2134 **
2135 ** Ensembl Object Adaptors are singleton objects in the sense that a single
2136 ** instance of an Ensembl Object Adaptor connected to a particular database is
2137 ** sufficient to instantiate any number of Ensembl Objects from the database.
2138 ** Each Ensembl Object will have a weak reference to the Object Adaptor that
2139 ** instantiated it. Therefore, Ensembl Object Adaptors should not be
2140 ** instantiated directly, but rather obtained from the Ensembl Registry,
2141 ** which will in turn call this function if neccessary.
2142 **
2143 ** @see ensRegistryGetDatabaseadaptor
2144 ** @see ensRegistryGetQcvariationadaptor
2145 **
2146 ** @param [u] dba [EnsPDatabaseadaptor] Ensembl Database Adaptor
2147 **
2148 ** @return [EnsPQcvariationadaptor]
2149 ** Ensembl Quality Check Variation Adaptor or NULL
2150 **
2151 ** @release 6.2.0
2152 ** @@
2153 ******************************************************************************/
2154 
ensQcvariationadaptorNew(EnsPDatabaseadaptor dba)2155 EnsPQcvariationadaptor ensQcvariationadaptorNew(
2156     EnsPDatabaseadaptor dba)
2157 {
2158     return ensBaseadaptorNew(
2159         dba,
2160         qcvariationadaptorKTablenames,
2161         qcvariationadaptorKColumnnames,
2162         (const EnsPBaseadaptorLeftjoin) NULL,
2163         (const char *) NULL,
2164         (const char *) NULL,
2165         &qcvariationadaptorFetchAllbyStatement);
2166 }
2167 
2168 
2169 
2170 
2171 /* @section destructors *******************************************************
2172 **
2173 ** Destruction destroys all internal data structures and frees the memory
2174 ** allocated for an Ensembl Quality Check Variation Adaptor object.
2175 **
2176 ** @fdata [EnsPQcvariationadaptor]
2177 **
2178 ** @nam3rule Del Destroy (free) an Ensembl Quality Check Variation Adaptor
2179 **
2180 ** @argrule * Pqcva [EnsPQcvariationadaptor*]
2181 ** Ensembl Quality Check Variation Adaptor address
2182 **
2183 ** @valrule * [void]
2184 **
2185 ** @fcategory delete
2186 ******************************************************************************/
2187 
2188 
2189 
2190 
2191 /* @func ensQcvariationadaptorDel *********************************************
2192 **
2193 ** Default destructor for an Ensembl Quality Check Variation Adaptor.
2194 **
2195 ** Ensembl Object Adaptors are singleton objects that are registered in the
2196 ** Ensembl Registry and weakly referenced by Ensembl Objects that have been
2197 ** instantiated by it. Therefore, Ensembl Object Adaptors should never be
2198 ** destroyed directly. Upon exit, the Ensembl Registry will call this function
2199 ** if required.
2200 **
2201 ** @param [d] Pqcva [EnsPQcvariationadaptor*]
2202 ** Ensembl Quality Check Variation Adaptor address
2203 **
2204 ** @return [void]
2205 **
2206 ** @release 6.2.0
2207 ** @@
2208 ******************************************************************************/
2209 
ensQcvariationadaptorDel(EnsPQcvariationadaptor * Pqcva)2210 void ensQcvariationadaptorDel(EnsPQcvariationadaptor *Pqcva)
2211 {
2212     ensBaseadaptorDel(Pqcva);
2213 
2214     return;
2215 }
2216 
2217 
2218 
2219 
2220 /* @section member retrieval **************************************************
2221 **
2222 ** Functions for returning members of an
2223 ** Ensembl Quality Check Variation Adaptor object.
2224 **
2225 ** @fdata [EnsPQcvariationadaptor]
2226 **
2227 ** @nam3rule Get Return Ensembl Quality Check Variation Adaptor attribute(s)
2228 ** @nam4rule Baseadaptor Return the Ensembl Base Adaptor
2229 ** @nam4rule Databaseadaptor Return the Ensembl Database Adaptor
2230 **
2231 ** @argrule * qcva [EnsPQcvariationadaptor]
2232 ** Ensembl Quality Check Variation Adaptor
2233 **
2234 ** @valrule Baseadaptor [EnsPBaseadaptor] Ensembl Base Adaptor or NULL
2235 ** @valrule Databaseadaptor [EnsPDatabaseadaptor] Ensembl Database Adaptor
2236 ** or NULL
2237 **
2238 ** @fcategory use
2239 ******************************************************************************/
2240 
2241 
2242 
2243 
2244 /* @func ensQcvariationadaptorGetBaseadaptor **********************************
2245 **
2246 ** Get the Ensembl Base Adaptor member of an
2247 ** Ensembl Quality Check Variation Adaptor.
2248 **
2249 ** @param [u] qcva [EnsPQcvariationadaptor]
2250 ** Ensembl Quality Check Variation Adaptor
2251 **
2252 ** @return [EnsPBaseadaptor] Ensembl Base Adaptor or NULL
2253 **
2254 ** @release 6.4.0
2255 ** @@
2256 ******************************************************************************/
2257 
ensQcvariationadaptorGetBaseadaptor(EnsPQcvariationadaptor qcva)2258 EnsPBaseadaptor ensQcvariationadaptorGetBaseadaptor(
2259     EnsPQcvariationadaptor qcva)
2260 {
2261     return qcva;
2262 }
2263 
2264 
2265 
2266 
2267 /* @func ensQcvariationadaptorGetDatabaseadaptor ******************************
2268 **
2269 ** Get the Ensembl Database Adaptor member of an
2270 ** Ensembl Quality Check Variation Adaptor.
2271 **
2272 ** @param [u] qcva [EnsPQcvariationadaptor]
2273 ** Ensembl Quality Check Variation Adaptor
2274 **
2275 ** @return [EnsPDatabaseadaptor] Ensembl Database Adaptor or NULL
2276 **
2277 ** @release 6.4.0
2278 ** @@
2279 ******************************************************************************/
2280 
ensQcvariationadaptorGetDatabaseadaptor(EnsPQcvariationadaptor qcva)2281 EnsPDatabaseadaptor ensQcvariationadaptorGetDatabaseadaptor(
2282     EnsPQcvariationadaptor qcva)
2283 {
2284     return ensBaseadaptorGetDatabaseadaptor(
2285         ensQcvariationadaptorGetBaseadaptor(qcva));
2286 }
2287 
2288 
2289 
2290 
2291 /* @section object retrieval **************************************************
2292 **
2293 ** Functions for fetching Ensembl Quality Check Variation objects from an
2294 ** Ensembl SQL database.
2295 **
2296 ** @fdata [EnsPQcvariationadaptor]
2297 **
2298 ** @nam3rule Fetch Fetch Ensembl Quality Check Variation object(s)
2299 ** @nam4rule All   Fetch all Ensembl Quality Check Variation objects
2300 ** @nam4rule Allby Fetch all Ensembl Quality Check Variation objects matching a
2301 **                 criterion
2302 ** @nam5rule Qcalignment Fetch all by an Ensembl Quality Check Alignment
2303 ** @nam5rule Qcdatabase  Fetch all by an Ensembl Quality Check Database
2304 ** @nam6rule Pair        Fetch all by an Ensembl Quality Check Database pair
2305 ** @nam6rule Query       Fetch all by an Ensembl Quality Check Database
2306 **                       as query
2307 ** @nam6rule Target      Fetch all by an Ensembl Quality Check Database
2308 **                       as target
2309 ** @nam4rule By Fetch one Ensembl Quality Check Variation object matching a
2310 ** criterion
2311 ** @nam5rule Identifier Fetch by an SQL database internal identifier
2312 **
2313 ** @argrule * qcva [EnsPQcvariationadaptor]
2314 ** Ensembl Quality Check Variation Adaptor
2315 ** @argrule AllbyQcalignment qca [const EnsPQcalignment]
2316 ** Ensembl Quality Check Alignment
2317 ** @argrule AllbyQcalignment qcvs [AjPList] AJAX List of
2318 ** Ensembl Quality Check Variation
2319 ** objects
2320 ** @argrule AllbyQcdatabasePair analysis [const EnsPAnalysis] Ensembl Analysis
2321 ** @argrule AllbyQcdatabasePair qdb [const EnsPQcdatabase]
2322 ** Query Ensembl Quality Check Database
2323 ** @argrule AllbyQcdatabasePair tdb [const EnsPQcdatabase]
2324 ** Target Ensembl Quality Check Database
2325 ** @argrule AllbyQcdatabasePair qcvs [AjPList] AJAX List of
2326 ** Ensembl Quality Check Variation objects
2327 ** @argrule AllbyQcdatabaseQuery analysis [const EnsPAnalysis] Ensembl Analysis
2328 ** @argrule AllbyQcdatabaseQuery qdb [const EnsPQcdatabase]
2329 ** Query Ensembl Quality Check Database
2330 ** @argrule AllbyQcdatabaseQuery qcvs [AjPList] AJAX List of
2331 ** Ensembl Quality Check Variation objects
2332 ** @argrule AllbyQcdatabaseTarget analysis [const EnsPAnalysis]
2333 ** Ensembl Analysis
2334 ** @argrule AllbyQcdatabaseTarget tdb [const EnsPQcdatabase]
2335 ** Target Ensembl Quality Check Database
2336 ** @argrule AllbyQcdatabaseTarget qcvs [AjPList] AJAX List of
2337 ** Ensembl Quality Check Variation objects
2338 ** @argrule ByIdentifier identifier [ajuint] SQL database-internal
2339 ** Ensembl Quality Check Variation identifier
2340 ** @argrule ByIdentifier Pqcv [EnsPQcvariation*]
2341 ** Ensembl Quality Check Variation address
2342 **
2343 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
2344 **
2345 ** @fcategory use
2346 ******************************************************************************/
2347 
2348 
2349 
2350 
2351 /* @func ensQcvariationadaptorFetchAllbyQcalignment ***************************
2352 **
2353 ** Fetch all Ensembl Quality Check Variation objects by an
2354 ** Ensembl Quality Check Alignment.
2355 **
2356 ** The caller is responsible for deleting the Ensembl Quality Check Variation
2357 ** objects before deleting the AJAX List.
2358 **
2359 ** @param [u] qcva [EnsPQcvariationadaptor]
2360 ** Ensembl Quality Check Variation Adaptor
2361 ** @param [r] qca [const EnsPQcalignment] Ensembl Quality Check Alignment
2362 ** @param [u] qcvs [AjPList] AJAX List of Ensembl Quality Check Variation objects
2363 **
2364 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2365 **
2366 ** @release 6.4.0
2367 ** @@
2368 ******************************************************************************/
2369 
ensQcvariationadaptorFetchAllbyQcalignment(EnsPQcvariationadaptor qcva,const EnsPQcalignment qca,AjPList qcvs)2370 AjBool ensQcvariationadaptorFetchAllbyQcalignment(
2371     EnsPQcvariationadaptor qcva,
2372     const EnsPQcalignment qca,
2373     AjPList qcvs)
2374 {
2375     AjBool result = AJFALSE;
2376 
2377     AjPStr constraint = NULL;
2378 
2379     if (!qcva)
2380         return ajFalse;
2381 
2382     if (!qca)
2383         return ajFalse;
2384 
2385     if (!qcvs)
2386         return ajFalse;
2387 
2388     constraint = ajFmtStr("variation.alignment_id = %u",
2389                           ensQcalignmentGetIdentifier(qca));
2390 
2391     result = ensBaseadaptorFetchAllbyConstraint(
2392         ensQcvariationadaptorGetBaseadaptor(qcva),
2393         constraint,
2394         (EnsPAssemblymapper) NULL,
2395         (EnsPSlice) NULL,
2396         qcvs);
2397 
2398     ajStrDel(&constraint);
2399 
2400     return result;
2401 }
2402 
2403 
2404 
2405 
2406 /* @func ensQcvariationadaptorFetchAllbyQcdatabasePair ************************
2407 **
2408 ** Fetch all Ensembl Quality Check Variation objects by an Ensembl Analysis,
2409 ** as well as Ensembl Quality Check Database objects representing query and
2410 ** target.
2411 **
2412 ** The caller is responsible for deleting the Ensembl Quality Check Variation
2413 ** objects before deleting the AJAX List.
2414 **
2415 ** @param [u] qcva [EnsPQcvariationadaptor]
2416 ** Ensembl Quality Check Variation Adaptor
2417 ** @param [r] analysis [const EnsPAnalysis] Ensembl Analysis
2418 ** @param [r] qdb [const EnsPQcdatabase] Query Ensembl Quality Check Database
2419 ** @param [r] tdb [const EnsPQcdatabase] Target Ensembl Quality Check Database
2420 ** @param [u] qcvs [AjPList] AJAX List of
2421 ** Ensembl Quality Check Variation objects
2422 **
2423 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2424 **
2425 ** @release 6.4.0
2426 ** @@
2427 ******************************************************************************/
2428 
ensQcvariationadaptorFetchAllbyQcdatabasePair(EnsPQcvariationadaptor qcva,const EnsPAnalysis analysis,const EnsPQcdatabase qdb,const EnsPQcdatabase tdb,AjPList qcvs)2429 AjBool ensQcvariationadaptorFetchAllbyQcdatabasePair(
2430     EnsPQcvariationadaptor qcva,
2431     const EnsPAnalysis analysis,
2432     const EnsPQcdatabase qdb,
2433     const EnsPQcdatabase tdb,
2434     AjPList qcvs)
2435 {
2436     AjBool result = AJFALSE;
2437 
2438     AjPStr constraint = NULL;
2439 
2440     if (!qcva)
2441         return ajFalse;
2442 
2443     if (!analysis)
2444         return ajFalse;
2445 
2446     if (!qdb)
2447         return ajFalse;
2448 
2449     if (!tdb)
2450         return ajFalse;
2451 
2452     if (!qcvs)
2453         return ajFalse;
2454 
2455     constraint = ajFmtStr("variation.analysis_id = %u "
2456                           "AND "
2457                           "variation.query_db_id = %u "
2458                           "AND "
2459                           "variation.target_db_id = %u",
2460                           ensAnalysisGetIdentifier(analysis),
2461                           ensQcdatabaseGetIdentifier(qdb),
2462                           ensQcdatabaseGetIdentifier(tdb));
2463 
2464     result = ensBaseadaptorFetchAllbyConstraint(
2465         ensQcvariationadaptorGetBaseadaptor(qcva),
2466         constraint,
2467         (EnsPAssemblymapper) NULL,
2468         (EnsPSlice) NULL,
2469         qcvs);
2470 
2471     ajStrDel(&constraint);
2472 
2473     return result;
2474 }
2475 
2476 
2477 
2478 
2479 /* @func ensQcvariationadaptorFetchAllbyQcdatabaseQuery ***********************
2480 **
2481 ** Fetch all Ensembl Quality Check Variation objects by an
2482 ** Ensembl Quality Check Database representing the query.
2483 **
2484 ** The caller is responsible for deleting the Ensembl Quality Check Variation
2485 ** objects before deleting the AJAX List.
2486 **
2487 ** @param [u] qcva [EnsPQcvariationadaptor]
2488 ** Ensembl Quality Check Variation Adaptor
2489 ** @param [rN] analysis [const EnsPAnalysis] Ensembl Analysis
2490 ** @param [r] qdb [const EnsPQcdatabase] Query Ensembl Quality Check Database
2491 ** @param [u] qcvs [AjPList] AJAX List of
2492 ** Ensembl Quality Check Variation objects
2493 **
2494 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2495 **
2496 ** @release 6.4.0
2497 ** @@
2498 ******************************************************************************/
2499 
ensQcvariationadaptorFetchAllbyQcdatabaseQuery(EnsPQcvariationadaptor qcva,const EnsPAnalysis analysis,const EnsPQcdatabase qdb,AjPList qcvs)2500 AjBool ensQcvariationadaptorFetchAllbyQcdatabaseQuery(
2501     EnsPQcvariationadaptor qcva,
2502     const EnsPAnalysis analysis,
2503     const EnsPQcdatabase qdb,
2504     AjPList qcvs)
2505 {
2506     AjBool result = AJFALSE;
2507 
2508     AjPStr constraint = NULL;
2509 
2510     if (!qcva)
2511         return ajFalse;
2512 
2513     if (!qdb)
2514         return ajFalse;
2515 
2516     if (!qcvs)
2517         return ajFalse;
2518 
2519     constraint = ajFmtStr("variation.query_db_id = %u",
2520                           ensQcdatabaseGetIdentifier(qdb));
2521 
2522     if (analysis)
2523         ajFmtPrintAppS(&constraint,
2524                        " AND variation.analysis_id = %u",
2525                        ensAnalysisGetIdentifier(analysis));
2526 
2527     result = ensBaseadaptorFetchAllbyConstraint(
2528         ensQcvariationadaptorGetBaseadaptor(qcva),
2529         constraint,
2530         (EnsPAssemblymapper) NULL,
2531         (EnsPSlice) NULL,
2532         qcvs);
2533 
2534     ajStrDel(&constraint);
2535 
2536     return result;
2537 }
2538 
2539 
2540 
2541 
2542 /* @func ensQcvariationadaptorFetchAllbyQcdatabaseTarget **********************
2543 **
2544 ** Fetch all Ensembl Quality Check Variation objects by an
2545 ** Ensembl Quality Check Database representing the target.
2546 **
2547 ** The caller is responsible for deleting the Ensembl Quality Check Variation
2548 ** objects before deleting the AJAX List.
2549 **
2550 ** @param [u] qcva [EnsPQcvariationadaptor]
2551 ** Ensembl Quality Check Variation Adaptor
2552 ** @param [rN] analysis [const EnsPAnalysis] Ensembl Analysis
2553 ** @param [r] tdb [const EnsPQcdatabase] Target Ensembl Quality Check Database
2554 ** @param [u] qcvs [AjPList] AJAX List of
2555 ** Ensembl Quality Check Variation objects
2556 **
2557 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2558 **
2559 ** @release 6.4.0
2560 ** @@
2561 ******************************************************************************/
2562 
ensQcvariationadaptorFetchAllbyQcdatabaseTarget(EnsPQcvariationadaptor qcva,const EnsPAnalysis analysis,const EnsPQcdatabase tdb,AjPList qcvs)2563 AjBool ensQcvariationadaptorFetchAllbyQcdatabaseTarget(
2564     EnsPQcvariationadaptor qcva,
2565     const EnsPAnalysis analysis,
2566     const EnsPQcdatabase tdb,
2567     AjPList qcvs)
2568 {
2569 
2570     AjBool result = AJFALSE;
2571 
2572     AjPStr constraint = NULL;
2573 
2574     if (!qcva)
2575         return ajFalse;
2576 
2577     if (!tdb)
2578         return ajFalse;
2579 
2580     if (!qcvs)
2581         return ajFalse;
2582 
2583     constraint = ajFmtStr("variation.target_db_id = %u",
2584                           ensQcdatabaseGetIdentifier(tdb));
2585 
2586     if (analysis)
2587         ajFmtPrintAppS(&constraint,
2588                        " AND variation.analysis_id = %u",
2589                        ensAnalysisGetIdentifier(analysis));
2590 
2591     result = ensBaseadaptorFetchAllbyConstraint(
2592         ensQcvariationadaptorGetBaseadaptor(qcva),
2593         constraint,
2594         (EnsPAssemblymapper) NULL,
2595         (EnsPSlice) NULL,
2596         qcvs);
2597 
2598     ajStrDel(&constraint);
2599 
2600     return result;
2601 }
2602 
2603 
2604 
2605 
2606 /* @func ensQcvariationadaptorFetchByIdentifier *******************************
2607 **
2608 ** Fetch an Ensembl Quality Check Variation via its
2609 ** SQL database-internal identifier.
2610 ** The caller is responsible for deleting the Ensembl Quality Check Variation.
2611 **
2612 ** @param [u] qcva [EnsPQcvariationadaptor]
2613 ** Ensembl Quality Check Variation Adaptor
2614 ** @param [r] identifier [ajuint] SQL database-internal
2615 ** Ensembl Quality Check Variation identifier
2616 ** @param [wP] Pqcv [EnsPQcvariation*] Ensembl Quality Check Variation address
2617 **
2618 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2619 **
2620 ** @release 6.2.0
2621 ** @@
2622 ******************************************************************************/
2623 
ensQcvariationadaptorFetchByIdentifier(EnsPQcvariationadaptor qcva,ajuint identifier,EnsPQcvariation * Pqcv)2624 AjBool ensQcvariationadaptorFetchByIdentifier(
2625     EnsPQcvariationadaptor qcva,
2626     ajuint identifier,
2627     EnsPQcvariation *Pqcv)
2628 {
2629     return ensBaseadaptorFetchByIdentifier(
2630         ensQcvariationadaptorGetBaseadaptor(qcva),
2631         identifier,
2632         (void **) Pqcv);
2633 }
2634 
2635 
2636 
2637 
2638 /* @section object access *****************************************************
2639 **
2640 ** Functions for accessing Ensembl Quality Check Variation objects in an
2641 ** Ensembl SQL database.
2642 **
2643 ** @fdata [EnsPQcvariationadaptor]
2644 **
2645 ** @nam3rule Delete Delete Ensembl Quality Check Variation object(s)
2646 ** @nam3rule Store  Store Ensembl Quality Check Variation object(s)
2647 ** @nam3rule Update Update Ensembl Quality Check Variation object(s)
2648 **
2649 ** @argrule * qcva [EnsPQcvariationadaptor]
2650 ** Ensembl Quality Check Variation Adaptor
2651 ** @argrule Delete qcv [EnsPQcvariation] Ensembl Quality Check Variation
2652 ** @argrule Store qcv [EnsPQcvariation] Ensembl Quality Check Variation
2653 ** @argrule Update qcv [const EnsPQcvariation] Ensembl Quality Check Variation
2654 **
2655 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
2656 **
2657 ** @fcategory use
2658 ******************************************************************************/
2659 
2660 
2661 
2662 
2663 /* @func ensQcvariationadaptorDelete ******************************************
2664 **
2665 ** Delete an Ensembl Quality Check Variation.
2666 **
2667 ** @param [u] qcva [EnsPQcvariationadaptor]
2668 ** Ensembl Quality Check Variation Adaptor
2669 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
2670 **
2671 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2672 **
2673 ** @release 6.2.0
2674 ** @@
2675 ******************************************************************************/
2676 
ensQcvariationadaptorDelete(EnsPQcvariationadaptor qcva,EnsPQcvariation qcv)2677 AjBool ensQcvariationadaptorDelete(EnsPQcvariationadaptor qcva,
2678                                    EnsPQcvariation qcv)
2679 {
2680     AjBool result = AJFALSE;
2681 
2682     AjPSqlstatement sqls = NULL;
2683 
2684     AjPStr statement = NULL;
2685 
2686     EnsPDatabaseadaptor dba = NULL;
2687 
2688     if (!qcva)
2689         return ajFalse;
2690 
2691     if (!qcv)
2692         return ajFalse;
2693 
2694     if (!ensQcvariationGetIdentifier(qcv))
2695         return ajFalse;
2696 
2697     dba = ensQcvariationadaptorGetDatabaseadaptor(qcva);
2698 
2699     statement = ajFmtStr(
2700         "DELETE FROM "
2701         "variation "
2702         "WHERE "
2703         "variation.variation_id = %u",
2704         qcv->Identifier);
2705 
2706     sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
2707 
2708     if (ajSqlstatementGetAffectedrows(sqls))
2709     {
2710         qcv->Adaptor    = NULL;
2711         qcv->Identifier = 0U;
2712 
2713         result = ajTrue;
2714     }
2715 
2716     ensDatabaseadaptorSqlstatementDel(dba, &sqls);
2717 
2718     ajStrDel(&statement);
2719 
2720     return result;
2721 }
2722 
2723 
2724 
2725 
2726 /* @func ensQcvariationadaptorStore *******************************************
2727 **
2728 ** Store an Ensembl Quality Check Variation.
2729 **
2730 ** @param [u] qcva [EnsPQcvariationadaptor]
2731 ** Ensembl Quality Check Variation Adaptor
2732 ** @param [u] qcv [EnsPQcvariation] Ensembl Quality Check Variation
2733 **
2734 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2735 **
2736 ** @release 6.2.0
2737 ** @@
2738 ******************************************************************************/
2739 
ensQcvariationadaptorStore(EnsPQcvariationadaptor qcva,EnsPQcvariation qcv)2740 AjBool ensQcvariationadaptorStore(EnsPQcvariationadaptor qcva,
2741                                   EnsPQcvariation qcv)
2742 {
2743     char *txtqstr = NULL;
2744     char *txttstr = NULL;
2745 
2746     AjBool result = AJFALSE;
2747 
2748     AjPSqlstatement sqls = NULL;
2749 
2750     AjPStr statement = NULL;
2751 
2752     EnsPDatabaseadaptor dba = NULL;
2753 
2754     if (!qcva)
2755         return ajFalse;
2756 
2757     if (!qcv)
2758         return ajFalse;
2759 
2760     if (ensQcvariationGetAdaptor(qcv) && ensQcvariationGetIdentifier(qcv))
2761         return ajFalse;
2762 
2763     dba = ensQcvariationadaptorGetDatabaseadaptor(qcva);
2764 
2765     ensDatabaseadaptorEscapeC(dba, &txtqstr, qcv->QueryString);
2766     ensDatabaseadaptorEscapeC(dba, &txttstr, qcv->TargetString);
2767 
2768     statement = ajFmtStr(
2769         "INSERT IGNORE INTO "
2770         "variation "
2771         "SET "
2772         "variation.analysis_id = %u, "
2773         "variation.alignment_id = %u, "
2774         "variation.query_db_id = %u, "
2775         "variation.query_id = %u, "
2776         "variation.query_start = %u, "
2777         "variation.query_end = %u, "
2778         "variation.query_seq = '%s', "
2779         "variation.target_db_id = %u, "
2780         "variation.target_id = %u, "
2781         "variation.target_start = %u, "
2782         "variation.target_end = %u, "
2783         "variation.target_seq = '%s', "
2784         "variation.class = '%s', "
2785         "variation.type = '%s', "
2786         "variation.state = '%s'",
2787         ensAnalysisGetIdentifier(qcv->Analysis),
2788         ensQcalignmentGetIdentity(qcv->Qcalignment),
2789         ensQcsequenceGetQcdatabaseIdentifier(qcv->QuerySequence),
2790         ensQcsequenceGetIdentifier(qcv->QuerySequence),
2791         qcv->QueryStart,
2792         qcv->QueryEnd,
2793         txtqstr,
2794         ensQcsequenceGetQcdatabaseIdentifier(qcv->TargetSequence),
2795         ensQcsequenceGetIdentifier(qcv->TargetSequence),
2796         qcv->TargetStart,
2797         qcv->TargetEnd,
2798         txttstr,
2799         ensQcvariationClassToChar(qcv->Class),
2800         ensQcvariationTypeToChar(qcv->Type),
2801         ensQcvariationStateToChar(qcv->State));
2802 
2803     ajCharDel(&txtqstr);
2804     ajCharDel(&txttstr);
2805 
2806     sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
2807 
2808     if (ajSqlstatementGetAffectedrows(sqls))
2809     {
2810         ensQcvariationSetIdentifier(qcv, ajSqlstatementGetIdentifier(sqls));
2811 
2812         ensQcvariationSetAdaptor(qcv, qcva);
2813 
2814         result = ajTrue;
2815     }
2816 
2817     ensDatabaseadaptorSqlstatementDel(dba, &sqls);
2818 
2819     ajStrDel(&statement);
2820 
2821     return result;
2822 }
2823 
2824 
2825 
2826 
2827 /* @func ensQcvariationadaptorUpdate ******************************************
2828 **
2829 ** Update an Ensembl Quality Check Variation.
2830 **
2831 ** @param [u] qcva [EnsPQcvariationadaptor]
2832 ** Ensembl Quality Check Variation Adaptor
2833 ** @param [r] qcv [const EnsPQcvariation] Ensembl Quality Check Variation
2834 **
2835 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2836 **
2837 ** @release 6.2.0
2838 ** @@
2839 ******************************************************************************/
2840 
ensQcvariationadaptorUpdate(EnsPQcvariationadaptor qcva,const EnsPQcvariation qcv)2841 AjBool ensQcvariationadaptorUpdate(EnsPQcvariationadaptor qcva,
2842                                    const EnsPQcvariation qcv)
2843 {
2844     char *txtqstr = NULL;
2845     char *txttstr = NULL;
2846 
2847     AjBool result = AJFALSE;
2848 
2849     AjPSqlstatement sqls = NULL;
2850 
2851     AjPStr statement = NULL;
2852 
2853     EnsPDatabaseadaptor dba = NULL;
2854 
2855     if (!qcva)
2856         return ajFalse;
2857 
2858     if (!qcv)
2859         return ajFalse;
2860 
2861     if (!ensQcvariationGetIdentifier(qcv))
2862         return ajFalse;
2863 
2864     dba = ensQcvariationadaptorGetDatabaseadaptor(qcva);
2865 
2866     ensDatabaseadaptorEscapeC(dba, &txtqstr, qcv->QueryString);
2867     ensDatabaseadaptorEscapeC(dba, &txttstr, qcv->TargetString);
2868 
2869     statement = ajFmtStr(
2870         "UPDATE IGNORE "
2871         "variation "
2872         "SET "
2873         "variation.analysis_id = %u, "
2874         "variation.alignment_id = %u, "
2875         "variation.query_db_id = %u, "
2876         "variation.query_id = %u, "
2877         "variation.query_start = %u, "
2878         "variation.query_end = %u, "
2879         "variation.query_seq = '%s', "
2880         "variation.target_db_id = %u, "
2881         "variation.target_id = %u, "
2882         "variation.target_start = %u, "
2883         "variation.target_end = %u, "
2884         "variation.target_seq = '%s', "
2885         "variation.class = '%s', "
2886         "variation.type = '%s', "
2887         "variation.state = '%s' "
2888         "WHERE "
2889         "variation.variation_id = %u",
2890         ensAnalysisGetIdentifier(qcv->Analysis),
2891         ensQcalignmentGetIdentity(qcv->Qcalignment),
2892         ensQcsequenceGetQcdatabaseIdentifier(qcv->QuerySequence),
2893         ensQcsequenceGetIdentifier(qcv->QuerySequence),
2894         qcv->QueryStart,
2895         qcv->QueryEnd,
2896         txtqstr,
2897         ensQcsequenceGetQcdatabaseIdentifier(qcv->TargetSequence),
2898         ensQcsequenceGetIdentifier(qcv->TargetSequence),
2899         qcv->TargetStart,
2900         qcv->TargetEnd,
2901         txttstr,
2902         ensQcvariationClassToChar(qcv->Class),
2903         ensQcvariationTypeToChar(qcv->Type),
2904         ensQcvariationStateToChar(qcv->State),
2905         qcv->Identifier);
2906 
2907     ajCharDel(&txtqstr);
2908     ajCharDel(&txttstr);
2909 
2910     sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
2911 
2912     if (ajSqlstatementGetAffectedrows(sqls))
2913         result = ajTrue;
2914 
2915     ensDatabaseadaptorSqlstatementDel(dba, &sqls);
2916 
2917     ajStrDel(&statement);
2918 
2919     return result;
2920 }
2921