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