1 /* @source ensqcdatabase ******************************************************
2 **
3 ** Ensembl Quality Check Database functions
4 **
5 ** @author Copyright (C) 1999 Ensembl Developers
6 ** @author Copyright (C) 2006 Michael K. Schuster
7 ** @version $Revision: 1.49 $
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 "ensqcdatabase.h"
34 #include "enstable.h"
35
36
37
38
39 /* ========================================================================= */
40 /* =============================== constants =============================== */
41 /* ========================================================================= */
42
43
44
45
46 /* ========================================================================= */
47 /* =========================== global variables ============================ */
48 /* ========================================================================= */
49
50
51
52
53 /* ========================================================================= */
54 /* ============================= private data ============================== */
55 /* ========================================================================= */
56
57
58
59
60 /* ========================================================================= */
61 /* =========================== private constants =========================== */
62 /* ========================================================================= */
63
64 /* @conststatic qcdatabaseKClass **********************************************
65 **
66 ** The Ensembl Quality Check Database class member is enumerated in
67 ** both, the SQL table definition and the data structure. The following strings
68 ** are used for conversion in database operations and correspond to
69 ** EnsEQcdatabaseClass.
70 **
71 ******************************************************************************/
72
73 static const char *qcdatabaseKClass[] =
74 {
75 "",
76 "unknown",
77 "reference",
78 "test",
79 "both",
80 "genome",
81 (const char *) NULL
82 };
83
84
85
86
87 /* @conststatic qcdatabaseKType ***********************************************
88 **
89 ** The Ensembl Quality Check Database type member is enumerated in
90 ** both, the SQL table definition and the data structure. The following strings
91 ** are used for conversion in database operations and correspond to
92 ** EnsEQcdatabaseType.
93 **
94 ******************************************************************************/
95
96 static const char *qcdatabaseKType[] =
97 {
98 "",
99 "unknown",
100 "dna",
101 "protein",
102 (const char *) NULL
103 };
104
105
106
107
108 /* @conststatic qcdatabaseadaptorKTablenames **********************************
109 **
110 ** Array of Ensembl Quality Check Database Adaptor SQL table names
111 **
112 ******************************************************************************/
113
114 static const char *qcdatabaseadaptorKTablenames[] =
115 {
116 "sequence_db",
117 (const char *) NULL
118 };
119
120
121
122
123 /* @conststatic qcdatabaseadaptorKColumnnames *********************************
124 **
125 ** Array of Ensembl Quality Check Database Adaptor SQL column names
126 **
127 ******************************************************************************/
128
129 static const char *qcdatabaseadaptorKColumnnames[] =
130 {
131 "sequence_db.sequence_db_id",
132 "sequence_db.analysis_id",
133 "sequence_db.name",
134 "sequence_db.dbrelease",
135 "sequence_db.date",
136 "sequence_db.format",
137 "sequence_db.type",
138 "sequence_db.class",
139 "sequence_db.species",
140 "sequence_db.dbgroup",
141 "sequence_db.host",
142 "sequence_db.directory",
143 "sequence_db.file",
144 "sequence_db.external_url",
145 (const char *) NULL
146 };
147
148
149
150
151 /* ========================================================================= */
152 /* =========================== private variables =========================== */
153 /* ========================================================================= */
154
155
156
157
158 /* ========================================================================= */
159 /* =========================== private functions =========================== */
160 /* ========================================================================= */
161
162 static AjBool qcdatabaseadaptorFetchAllbyStatement(
163 EnsPBaseadaptor ba,
164 const AjPStr statement,
165 EnsPAssemblymapper am,
166 EnsPSlice slice,
167 AjPList qcdbs);
168
169 static AjBool qcdatabaseadaptorCacheInsert(EnsPQcdatabaseadaptor qcdba,
170 EnsPQcdatabase *Pqcdb);
171
172 static AjBool qcdatabaseadaptorCacheRemove(EnsPQcdatabaseadaptor qcdba,
173 EnsPQcdatabase qcdb);
174
175 static AjBool qcdatabaseadaptorCacheInit(EnsPQcdatabaseadaptor qcdba);
176
177
178
179
180 /* ========================================================================= */
181 /* ======================= All functions by section ======================== */
182 /* ========================================================================= */
183
184
185
186
187 /* @filesection ensqcdatabase *************************************************
188 **
189 ** @nam1rule ens Function belongs to the Ensembl library
190 **
191 ******************************************************************************/
192
193
194
195
196 /* @datasection [EnsPQcdatabase] Ensembl Quality Check Database ***************
197 **
198 ** @nam2rule Qcdatabase Functions for manipulating
199 ** Ensembl Quality Check Database objects
200 **
201 ** @cc Bio::EnsEMBL::QC::SequenceDB
202 ** @cc CVS Revision:
203 ** @cc CVS Tag:
204 **
205 ******************************************************************************/
206
207
208
209
210 /* @section constructors ******************************************************
211 **
212 ** All constructors return a new Ensembl Quality Check Database by pointer.
213 ** It is the responsibility of the user to first destroy any previous
214 ** Quality Check Database. The target pointer does not need to be initialised
215 ** to NULL, but it is good programming practice to do so anyway.
216 **
217 ** @fdata [EnsPQcdatabase]
218 **
219 ** @nam3rule New Constructor
220 ** @nam4rule Cpy Constructor with existing object
221 ** @nam4rule Ini Constructor with initial values
222 ** @nam4rule Ref Constructor by incrementing the reference counter
223 **
224 ** @argrule Cpy qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
225 ** @argrule Ini qcdba [EnsPQcdatabaseadaptor]
226 ** Ensembl Quality Check Database Adaptor
227 ** @argrule Ini identifier [ajuint] SQL database-internal identifier
228 ** @argrule Ini analysis [EnsPAnalysis] Ensembl Analysis
229 ** @argrule Ini name [AjPStr] Name
230 ** @argrule Ini release [AjPStr] Release
231 ** @argrule Ini date [AjPStr] Date
232 ** @argrule Ini format [AjPStr] Format
233 ** @argrule Ini qcdbc [EnsEQcdatabaseClass]
234 ** Ensembl Quality Check Database Class enumeration
235 ** @argrule Ini qcdbt [EnsEQcdatabaseType]
236 ** Ensembl Quality Check Database Type enumeration
237 ** @argrule Ini dbaspecies [AjPStr] Ensembl Database Adaptor species
238 ** @argrule Ini dbag [EnsEDatabaseadaptorGroup]
239 ** Ensembl Database Adaptor Group enumeration
240 ** @argrule Ini host [AjPStr] Host
241 ** @argrule Ini directory [AjPStr] Directory
242 ** @argrule Ini file [AjPStr] File
243 ** @argrule Ini externalurl [AjPStr] External URL
244 ** @argrule Ref qcdb [EnsPQcdatabase] Ensembl Quality Check Database
245 **
246 ** @valrule * [EnsPQcdatabase] Ensembl Quality Check Database or NULL
247 **
248 ** @fcategory new
249 ******************************************************************************/
250
251
252
253
254 /* @func ensQcdatabaseNewCpy **************************************************
255 **
256 ** Object-based constructor function, which returns an independent object.
257 **
258 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
259 **
260 ** @return [EnsPQcdatabase] Ensembl Quality Check Database or NULL
261 **
262 ** @release 6.4.0
263 ** @@
264 ******************************************************************************/
265
ensQcdatabaseNewCpy(const EnsPQcdatabase qcdb)266 EnsPQcdatabase ensQcdatabaseNewCpy(const EnsPQcdatabase qcdb)
267 {
268 EnsPQcdatabase pthis = NULL;
269
270 if (!qcdb)
271 return NULL;
272
273 AJNEW0(pthis);
274
275 pthis->Use = 1U;
276 pthis->Identifier = qcdb->Identifier;
277 pthis->Adaptor = qcdb->Adaptor;
278
279 if (qcdb->Analysis)
280 pthis->Analysis = ensAnalysisNewRef(qcdb->Analysis);
281
282 if (qcdb->Name)
283 pthis->Name = ajStrNewRef(qcdb->Name);
284
285 if (qcdb->Release)
286 pthis->Release = ajStrNewRef(qcdb->Release);
287
288 if (qcdb->Date)
289 pthis->Date = ajStrNewRef(qcdb->Date);
290
291 if (qcdb->Format)
292 pthis->Format = ajStrNewRef(qcdb->Format);
293
294 pthis->Class = qcdb->Class;
295 pthis->Type = qcdb->Type;
296
297 if (qcdb->DatabaseadaptorSpecies)
298 pthis->DatabaseadaptorSpecies = ajStrNewRef(
299 qcdb->DatabaseadaptorSpecies);
300
301 pthis->DatabaseadaptorGroup = qcdb->DatabaseadaptorGroup;
302
303 if (qcdb->Host)
304 pthis->Host = ajStrNewRef(qcdb->Host);
305
306 if (qcdb->Directory)
307 pthis->Directory = ajStrNewRef(qcdb->Directory);
308
309 if (qcdb->File)
310 pthis->File = ajStrNewRef(qcdb->File);
311
312 if (qcdb->UrlExternal)
313 pthis->UrlExternal = ajStrNewRef(qcdb->UrlExternal);
314
315 if (qcdb->UrlInternal)
316 pthis->UrlInternal = ajStrNewRef(qcdb->UrlInternal);
317
318 return pthis;
319 }
320
321
322
323
324 /* @func ensQcdatabaseNewIni **************************************************
325 **
326 ** Constructor for an Ensembl Quality Check Database with initial values.
327 **
328 ** @cc Bio::EnsEMBL::Storable::new
329 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
330 ** Ensembl Quality Check Database Adaptor
331 ** @param [r] identifier [ajuint] SQL database-internal identifier
332 ** @cc Bio::EnsEMBL::QC::SequenceDB::new
333 ** @param [u] analysis [EnsPAnalysis] Ensembl Analysis
334 ** @param [u] name [AjPStr] Name
335 ** @param [u] release [AjPStr] Release
336 ** @param [u] date [AjPStr] Date
337 ** @param [u] format [AjPStr] Format
338 ** @param [u] qcdbc [EnsEQcdatabaseClass]
339 ** Ensembl Quality Check Database Class enumeration
340 ** @param [u] qcdbt [EnsEQcdatabaseType]
341 ** Ensembl Quality Check Database Type enumeration
342 ** @param [u] dbaspecies [AjPStr] Ensembl Database Adaptor species
343 ** @param [u] dbag [EnsEDatabaseadaptorGroup]
344 ** Ensembl Database Adaptor Group enumeration
345 ** @param [u] host [AjPStr] Host
346 ** @param [u] directory [AjPStr] Directory
347 ** @param [u] file [AjPStr] File
348 ** @param [u] externalurl [AjPStr] External URL
349 **
350 ** @return [EnsPQcdatabase] Ensembl Quality Check Database or NULL
351 **
352 ** @release 6.4.0
353 ** @@
354 ******************************************************************************/
355
ensQcdatabaseNewIni(EnsPQcdatabaseadaptor qcdba,ajuint identifier,EnsPAnalysis analysis,AjPStr name,AjPStr release,AjPStr date,AjPStr format,EnsEQcdatabaseClass qcdbc,EnsEQcdatabaseType qcdbt,AjPStr dbaspecies,EnsEDatabaseadaptorGroup dbag,AjPStr host,AjPStr directory,AjPStr file,AjPStr externalurl)356 EnsPQcdatabase ensQcdatabaseNewIni(EnsPQcdatabaseadaptor qcdba,
357 ajuint identifier,
358 EnsPAnalysis analysis,
359 AjPStr name,
360 AjPStr release,
361 AjPStr date,
362 AjPStr format,
363 EnsEQcdatabaseClass qcdbc,
364 EnsEQcdatabaseType qcdbt,
365 AjPStr dbaspecies,
366 EnsEDatabaseadaptorGroup dbag,
367 AjPStr host,
368 AjPStr directory,
369 AjPStr file,
370 AjPStr externalurl)
371 {
372 EnsPQcdatabase qcdb = NULL;
373
374 if (!analysis)
375 return NULL;
376
377 if (!name)
378 return NULL;
379
380 if (!release)
381 return NULL;
382
383 AJNEW0(qcdb);
384
385 qcdb->Use = 1U;
386 qcdb->Identifier = identifier;
387 qcdb->Adaptor = qcdba;
388 qcdb->Analysis = ensAnalysisNewRef(analysis);
389
390 if (name)
391 qcdb->Name = ajStrNewRef(name);
392
393 if (release)
394 qcdb->Release = ajStrNewRef(release);
395
396 if (date)
397 qcdb->Date = ajStrNewRef(date);
398
399 if (format)
400 qcdb->Format = ajStrNewRef(format);
401
402 qcdb->Class = qcdbc;
403
404 qcdb->Type = qcdbt;
405
406 if (dbaspecies)
407 qcdb->DatabaseadaptorSpecies = ajStrNewRef(dbaspecies);
408
409 qcdb->DatabaseadaptorGroup = dbag;
410
411 if (host)
412 qcdb->Host = ajStrNewRef(host);
413
414 if (directory)
415 qcdb->Directory = ajStrNewRef(directory);
416
417 if (file)
418 qcdb->File = ajStrNewRef(file);
419
420 if (externalurl)
421 qcdb->UrlExternal = ajStrNewRef(externalurl);
422
423 qcdb->UrlInternal = NULL;
424
425 return qcdb;
426 }
427
428
429
430
431 /* @func ensQcdatabaseNewRef **************************************************
432 **
433 ** Ensembl Object referencing function, which returns a pointer to the
434 ** Ensembl Object passed in and increases its reference count.
435 **
436 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
437 **
438 ** @return [EnsPQcdatabase] Ensembl Quality Check Database or NULL
439 **
440 ** @release 6.2.0
441 ** @@
442 ******************************************************************************/
443
ensQcdatabaseNewRef(EnsPQcdatabase qcdb)444 EnsPQcdatabase ensQcdatabaseNewRef(EnsPQcdatabase qcdb)
445 {
446 if (!qcdb)
447 return NULL;
448
449 qcdb->Use++;
450
451 return qcdb;
452 }
453
454
455
456
457 /* @section destructors *******************************************************
458 **
459 ** Destruction destroys all internal data structures and frees the memory
460 ** allocated for an Ensembl Quality Check Database object.
461 **
462 ** @fdata [EnsPQcdatabase]
463 **
464 ** @nam3rule Del Destroy (free) an Ensembl Quality Check Database
465 **
466 ** @argrule * Pqcdb [EnsPQcdatabase*] Ensembl Quality Check Database address
467 **
468 ** @valrule * [void]
469 **
470 ** @fcategory delete
471 ******************************************************************************/
472
473
474
475
476 /* @func ensQcdatabaseDel *****************************************************
477 **
478 ** Default destructor for an Ensembl Quality Check Database.
479 **
480 ** @param [d] Pqcdb [EnsPQcdatabase*] Ensembl Quality Check Database address
481 **
482 ** @return [void]
483 **
484 ** @release 6.2.0
485 ** @@
486 ******************************************************************************/
487
ensQcdatabaseDel(EnsPQcdatabase * Pqcdb)488 void ensQcdatabaseDel(EnsPQcdatabase *Pqcdb)
489 {
490 EnsPQcdatabase pthis = NULL;
491
492 if (!Pqcdb)
493 return;
494
495 #if defined(AJ_DEBUG) && AJ_DEBUG >= 1
496 if (ajDebugTest("ensQcdatabaseDel"))
497 {
498 ajDebug("ensQcdatabaseDel\n"
499 " *Pqcdb %p\n",
500 *Pqcdb);
501
502 ensQcdatabaseTrace(*Pqcdb, 1);
503 }
504 #endif /* defined(AJ_DEBUG) && AJ_DEBUG >= 1 */
505
506 if (!(pthis = *Pqcdb) || --pthis->Use)
507 {
508 *Pqcdb = NULL;
509
510 return;
511 }
512
513 ensAnalysisDel(&pthis->Analysis);
514
515 ajStrDel(&pthis->Name);
516 ajStrDel(&pthis->Release);
517 ajStrDel(&pthis->Date);
518 ajStrDel(&pthis->Format);
519 ajStrDel(&pthis->DatabaseadaptorSpecies);
520 ajStrDel(&pthis->Host);
521 ajStrDel(&pthis->Directory);
522 ajStrDel(&pthis->File);
523 ajStrDel(&pthis->UrlExternal);
524 ajStrDel(&pthis->UrlInternal);
525
526 ajMemFree((void **) Pqcdb);
527
528 return;
529 }
530
531
532
533
534 /* @section member retrieval **************************************************
535 **
536 ** Functions for returning members of an
537 ** Ensembl Quality Check Database object.
538 **
539 ** @fdata [EnsPQcdatabase]
540 **
541 ** @nam3rule Get Return Ensembl Quality Check Database attribute(s)
542 ** @nam4rule Adaptor Return the Ensembl Quality Check Database Adaptor
543 ** @nam4rule Analysis Return the Ensembl Analysis
544 ** @nam4rule Class Return the class
545 ** @nam4rule Databaseadaptor Return Ensembl Database Adaptor attribute(s)
546 ** @nam5rule Group Return the Ensembl Database Adaptor Group
547 ** @nam5rule Species Return the Ensembl Database Adaptor species
548 ** @nam4rule Date Return the date
549 ** @nam4rule Directory Return the directory
550 ** @nam4rule File Return the file
551 ** @nam4rule Format return the format
552 ** @nam4rule Host Return the host
553 ** @nam4rule Identifier Return the SQL database-internal identifier
554 ** @nam4rule Name Return the name
555 ** @nam4rule Release Return the release
556 ** @nam4rule Type Return the type
557 ** @nam4rule Url Return a Uniform Resource Locator
558 ** @nam5rule External Return the external URL
559 ** @nam5rule Internal Return the internal URL
560 **
561 ** @argrule * qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
562 **
563 ** @valrule Adaptor [EnsPQcdatabaseadaptor]
564 ** Ensembl Quality Check Database Adaptor or NULL
565 ** @valrule Analysis [EnsPAnalysis] Ensembl Analysis or NULL
566 ** @valrule Class [EnsEQcdatabaseClass] Class or ensEQcdatabaseClassNULL
567 ** @valrule DatabaseadaptorGroup [EnsEDatabaseadaptorGroup]
568 ** Ensembl Database Adaptor Group enumeration or ensEDatabaseadaptorGroupNULL
569 ** @valrule DatabaseadaptorSpecies [AjPStr]
570 ** Ensembl Database Adaptor species or NULL
571 ** @valrule Date [AjPStr] Date or NULL
572 ** @valrule Directory [AjPStr] Directory or NULL
573 ** @valrule File [AjPStr] File or NULL
574 ** @valrule Format [AjPStr] Format or NULL
575 ** @valrule Host [AjPStr] Host or NULL
576 ** @valrule Identifier [ajuint] SQL database-internal identifier or 0U
577 ** @valrule Name [AjPStr] Name or NULL
578 ** @valrule Release [AjPStr] Release or NULL
579 ** @valrule Type [EnsEQcdatabaseType] Type or ensEQcdatabaseTypeNULL
580 ** @valrule UrlExternal [AjPStr] External URL or NULL
581 ** @valrule UrlInternal [AjPStr] Internal URL or NULL
582 **
583 ** @fcategory use
584 ******************************************************************************/
585
586
587
588
589 /* @func ensQcdatabaseGetAdaptor **********************************************
590 **
591 ** Get the Ensembl Quality Check Database Adaptor member of an
592 ** Ensembl Quality Check Database.
593 **
594 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
595 **
596 ** @return [EnsPQcdatabaseadaptor] Ensembl Quality Check Database Adaptor
597 ** or NULL
598 **
599 ** @release 6.2.0
600 ** @@
601 ******************************************************************************/
602
ensQcdatabaseGetAdaptor(const EnsPQcdatabase qcdb)603 EnsPQcdatabaseadaptor ensQcdatabaseGetAdaptor(
604 const EnsPQcdatabase qcdb)
605 {
606 return (qcdb) ? qcdb->Adaptor : NULL;
607 }
608
609
610
611
612 /* @func ensQcdatabaseGetAnalysis *********************************************
613 **
614 ** Get the Ensembl Analysis member of an Ensembl Quality Check Database.
615 **
616 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
617 **
618 ** @return [EnsPAnalysis] Ensembl Analysis or NULL
619 **
620 ** @release 6.2.0
621 ** @@
622 ******************************************************************************/
623
ensQcdatabaseGetAnalysis(const EnsPQcdatabase qcdb)624 EnsPAnalysis ensQcdatabaseGetAnalysis(
625 const EnsPQcdatabase qcdb)
626 {
627 return (qcdb) ? qcdb->Analysis : NULL;
628 }
629
630
631
632
633 /* @func ensQcdatabaseGetClass ************************************************
634 **
635 ** Get the class member of an Ensembl Quality Check Database.
636 **
637 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
638 **
639 ** @return [EnsEQcdatabaseClass] Class or ensEQcdatabaseClassNULL
640 **
641 ** @release 6.2.0
642 ** @@
643 ******************************************************************************/
644
ensQcdatabaseGetClass(const EnsPQcdatabase qcdb)645 EnsEQcdatabaseClass ensQcdatabaseGetClass(
646 const EnsPQcdatabase qcdb)
647 {
648 return (qcdb) ? qcdb->Class : ensEQcdatabaseClassNULL;
649 }
650
651
652
653
654 /* @func ensQcdatabaseGetDatabaseadaptorGroup *********************************
655 **
656 ** Get the Ensembl Database Adaptor Group enumeration member of an
657 ** Ensembl Quality Check Database.
658 **
659 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
660 **
661 ** @return [EnsEDatabaseadaptorGroup]
662 ** Ensembl Database Adaptor Group enumeration or ensEDatabaseadaptorGroupNULL
663 **
664 ** @release 6.4.0
665 ** @@
666 ******************************************************************************/
667
ensQcdatabaseGetDatabaseadaptorGroup(const EnsPQcdatabase qcdb)668 EnsEDatabaseadaptorGroup ensQcdatabaseGetDatabaseadaptorGroup(
669 const EnsPQcdatabase qcdb)
670 {
671 return (qcdb) ? qcdb->DatabaseadaptorGroup : ensEDatabaseadaptorGroupNULL;
672 }
673
674
675
676
677 /* @func ensQcdatabaseGetDatabaseadaptorSpecies *******************************
678 **
679 ** Get the Ensembl Database Adaptor species member of an
680 ** Ensembl Quality Check Database.
681 **
682 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
683 **
684 ** @return [AjPStr] Ensembl Database Adaptor species or NULL
685 **
686 ** @release 6.4.0
687 ** @@
688 ******************************************************************************/
689
ensQcdatabaseGetDatabaseadaptorSpecies(const EnsPQcdatabase qcdb)690 AjPStr ensQcdatabaseGetDatabaseadaptorSpecies(
691 const EnsPQcdatabase qcdb)
692 {
693 return (qcdb) ? qcdb->DatabaseadaptorSpecies : NULL;
694 }
695
696
697
698
699 /* @func ensQcdatabaseGetDate *************************************************
700 **
701 ** Get the date member of an Ensembl Quality Check Database.
702 **
703 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
704 **
705 ** @return [AjPStr] Date or NULL
706 **
707 ** @release 6.2.0
708 ** @@
709 ******************************************************************************/
710
ensQcdatabaseGetDate(const EnsPQcdatabase qcdb)711 AjPStr ensQcdatabaseGetDate(
712 const EnsPQcdatabase qcdb)
713 {
714 return (qcdb) ? qcdb->Date : NULL;
715 }
716
717
718
719
720 /* @func ensQcdatabaseGetDirectory ********************************************
721 **
722 ** Get the directory member of an Ensembl Quality Check Database.
723 **
724 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
725 **
726 ** @return [AjPStr] Directory or NULL
727 **
728 ** @release 6.2.0
729 ** @@
730 ******************************************************************************/
731
ensQcdatabaseGetDirectory(const EnsPQcdatabase qcdb)732 AjPStr ensQcdatabaseGetDirectory(
733 const EnsPQcdatabase qcdb)
734 {
735 return (qcdb) ? qcdb->Directory : NULL;
736 }
737
738
739
740
741 /* @func ensQcdatabaseGetFile *************************************************
742 **
743 ** Get the file member of an Ensembl Quality Check Database.
744 **
745 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
746 **
747 ** @return [AjPStr] File or NULL
748 **
749 ** @release 6.2.0
750 ** @@
751 ******************************************************************************/
752
ensQcdatabaseGetFile(const EnsPQcdatabase qcdb)753 AjPStr ensQcdatabaseGetFile(
754 const EnsPQcdatabase qcdb)
755 {
756 return (qcdb) ? qcdb->File : NULL;
757 }
758
759
760
761
762 /* @func ensQcdatabaseGetFormat ***********************************************
763 **
764 ** Get the format member of an Ensembl Quality Check Database.
765 **
766 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
767 **
768 ** @return [AjPStr] Format
769 **
770 ** @release 6.2.0
771 ** @@
772 ******************************************************************************/
773
ensQcdatabaseGetFormat(const EnsPQcdatabase qcdb)774 AjPStr ensQcdatabaseGetFormat(
775 const EnsPQcdatabase qcdb)
776 {
777 return (qcdb) ? qcdb->Format : NULL;
778 }
779
780
781
782
783 /* @func ensQcdatabaseGetHost *************************************************
784 **
785 ** Get the host member of an Ensembl Quality Check Database.
786 **
787 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
788 **
789 ** @return [AjPStr] Host or NULL
790 **
791 ** @release 6.2.0
792 ** @@
793 ******************************************************************************/
794
ensQcdatabaseGetHost(const EnsPQcdatabase qcdb)795 AjPStr ensQcdatabaseGetHost(
796 const EnsPQcdatabase qcdb)
797 {
798 return (qcdb) ? qcdb->Host : NULL;
799 }
800
801
802
803
804 /* @func ensQcdatabaseGetIdentifier *******************************************
805 **
806 ** Get the SQL database-internal identifier member of an
807 ** Ensembl Quality Check Database.
808 **
809 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
810 **
811 ** @return [ajuint] SQL database-internal identifier or 0U
812 **
813 ** @release 6.2.0
814 ** @@
815 ******************************************************************************/
816
ensQcdatabaseGetIdentifier(const EnsPQcdatabase qcdb)817 ajuint ensQcdatabaseGetIdentifier(
818 const EnsPQcdatabase qcdb)
819 {
820 return (qcdb) ? qcdb->Identifier : 0U;
821 }
822
823
824
825
826 /* @func ensQcdatabaseGetName *************************************************
827 **
828 ** Get the name member of an Ensembl Quality Check Database.
829 **
830 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
831 **
832 ** @return [AjPStr] Name or NULL
833 **
834 ** @release 6.2.0
835 ** @@
836 ******************************************************************************/
837
ensQcdatabaseGetName(const EnsPQcdatabase qcdb)838 AjPStr ensQcdatabaseGetName(
839 const EnsPQcdatabase qcdb)
840 {
841 return (qcdb) ? qcdb->Name : NULL;
842 }
843
844
845
846
847 /* @func ensQcdatabaseGetRelease **********************************************
848 **
849 ** Get the release member of an Ensembl Quality Check Database.
850 **
851 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
852 **
853 ** @return [AjPStr] Release or NULL
854 **
855 ** @release 6.2.0
856 ** @@
857 ******************************************************************************/
858
ensQcdatabaseGetRelease(const EnsPQcdatabase qcdb)859 AjPStr ensQcdatabaseGetRelease(
860 const EnsPQcdatabase qcdb)
861 {
862 return (qcdb) ? qcdb->Release : NULL;
863 }
864
865
866
867
868 /* @func ensQcdatabaseGetType *************************************************
869 **
870 ** Get the type member of an Ensembl Quality Check Database.
871 **
872 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
873 **
874 ** @return [EnsEQcdatabaseType] Type or ensEQcdasfeatureTypeNULL
875 **
876 ** @release 6.2.0
877 ** @@
878 ******************************************************************************/
879
ensQcdatabaseGetType(const EnsPQcdatabase qcdb)880 EnsEQcdatabaseType ensQcdatabaseGetType(
881 const EnsPQcdatabase qcdb)
882 {
883 return (qcdb) ? qcdb->Type : ensEQcdatabaseTypeNULL;
884 }
885
886
887
888
889 /* @func ensQcdatabaseGetUrlExternal ******************************************
890 **
891 ** Get the external Uniform Resource Locator (URL) member of an
892 ** Ensembl Quality Check Database.
893 **
894 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
895 **
896 ** @return [AjPStr] External URL or NULL
897 **
898 ** @release 6.4.0
899 ** @@
900 ******************************************************************************/
901
ensQcdatabaseGetUrlExternal(const EnsPQcdatabase qcdb)902 AjPStr ensQcdatabaseGetUrlExternal(
903 const EnsPQcdatabase qcdb)
904 {
905 return (qcdb) ? qcdb->UrlExternal : NULL;
906 }
907
908
909
910
911 /* @func ensQcdatabaseGetUrlInternal ******************************************
912 **
913 ** Get the internal Uniform Resource Locator (URL) member of an
914 ** Ensembl Quality Check Database.
915 **
916 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
917 **
918 ** @return [AjPStr] Internal URL or NULL
919 **
920 ** @release 6.4.0
921 ** @@
922 ******************************************************************************/
923
ensQcdatabaseGetUrlInternal(const EnsPQcdatabase qcdb)924 AjPStr ensQcdatabaseGetUrlInternal(
925 const EnsPQcdatabase qcdb)
926 {
927 return (qcdb) ? qcdb->UrlInternal : NULL;
928 }
929
930
931
932
933 /* @section modifiers *********************************************************
934 **
935 ** Functions for assigning members of an
936 ** Ensembl Quality Check Database object.
937 **
938 ** @fdata [EnsPQcdatabase]
939 **
940 ** @nam3rule Set Set one member of an Ensembl Quality Check Database
941 ** @nam4rule Adaptor Set the Ensembl Quality Check Database Adaptor
942 ** @nam4rule Analysis Set the Ensembl Analysis
943 ** @nam4rule Class Set the class
944 ** @nam4rule Databaseadaptor Set Ensembl Database Adaptor members
945 ** @nam5rule Group Set the Ensembl Database Adaptor group
946 ** @nam5rule Species Set the Ensembl Database Adaptor species
947 ** @nam4rule Date Set the date
948 ** @nam4rule Directory Set the directory
949 ** @nam4rule File Set the file
950 ** @nam4rule Format Set the format
951 ** @nam4rule Host Set the host
952 ** @nam4rule Identifier Set the SQL database-internal identifier
953 ** @nam4rule Name Set the name
954 ** @nam4rule Release Set the release
955 ** @nam4rule Type Set the type
956 ** @nam4rule Url Set a Uniform Resource Locator
957 ** @nam5rule External Set the external URL
958 ** @nam5rule Internal Set the internal URL
959 **
960 ** @argrule * qcdb [EnsPQcdatabase] Ensembl Quality Check Database
961 ** @argrule Adaptor qcdba [EnsPQcdatabaseadaptor]
962 ** Ensembl Quality Check Database Adaptor
963 ** @argrule Analysis analysis [EnsPAnalysis] Ensembl Analysis
964 ** @argrule Class qcdbc [EnsEQcdatabaseClass] Class
965 ** @argrule DatabaseadaptorGroup dbag [EnsEDatabaseadaptorGroup]
966 ** Ensembl Database Adaptor Group enumeration
967 ** @argrule DatabaseadaptorSpecies dbaspecies [AjPStr] Ensembl Database Adaptor
968 ** species
969 ** @argrule Date date [AjPStr] Date
970 ** @argrule Directory directory [AjPStr] Directory
971 ** @argrule File file [AjPStr] File
972 ** @argrule Format format [AjPStr] Format
973 ** @argrule Host host [AjPStr] Host
974 ** @argrule Identifier identifier [ajuint] SQL database-internal identifier
975 ** @argrule Name name [AjPStr] Name
976 ** @argrule Release release [AjPStr] Release
977 ** @argrule Type qcdbt [EnsEQcdatabaseType] Type
978 ** @argrule UrlExternal url [AjPStr] External URL
979 ** @argrule UrlInternal url [AjPStr] Internal URL
980 **
981 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
982 **
983 ** @fcategory modify
984 ******************************************************************************/
985
986
987
988
989 /* @func ensQcdatabaseSetAdaptor **********************************************
990 **
991 ** Set the Ensembl Quality Check Database Adaptor member of an
992 ** Ensembl Quality Check Database.
993 **
994 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
995 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
996 ** Ensembl Quality Check Database Adaptor
997 **
998 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
999 **
1000 ** @release 6.2.0
1001 ** @@
1002 ******************************************************************************/
1003
ensQcdatabaseSetAdaptor(EnsPQcdatabase qcdb,EnsPQcdatabaseadaptor qcdba)1004 AjBool ensQcdatabaseSetAdaptor(EnsPQcdatabase qcdb,
1005 EnsPQcdatabaseadaptor qcdba)
1006 {
1007 if (!qcdb)
1008 return ajFalse;
1009
1010 qcdb->Adaptor = qcdba;
1011
1012 return ajTrue;
1013 }
1014
1015
1016
1017
1018 /* @func ensQcdatabaseSetAnalysis *********************************************
1019 **
1020 ** Set the Ensembl Analysis member of an Ensembl Quality Check Database.
1021 **
1022 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1023 ** @param [u] analysis [EnsPAnalysis] Ensembl Analysis
1024 **
1025 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1026 **
1027 ** @release 6.2.0
1028 ** @@
1029 ******************************************************************************/
1030
ensQcdatabaseSetAnalysis(EnsPQcdatabase qcdb,EnsPAnalysis analysis)1031 AjBool ensQcdatabaseSetAnalysis(EnsPQcdatabase qcdb,
1032 EnsPAnalysis analysis)
1033 {
1034 if (!qcdb)
1035 return ajFalse;
1036
1037 ensAnalysisDel(&qcdb->Analysis);
1038
1039 qcdb->Analysis = ensAnalysisNewRef(analysis);
1040
1041 return ajTrue;
1042 }
1043
1044
1045
1046
1047 /* @func ensQcdatabaseSetClass ************************************************
1048 **
1049 ** Set the class member of an Ensembl Quality Check Database.
1050 **
1051 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1052 ** @param [u] qcdbc [EnsEQcdatabaseClass] Class
1053 **
1054 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1055 **
1056 ** @release 6.2.0
1057 ** @@
1058 ******************************************************************************/
1059
ensQcdatabaseSetClass(EnsPQcdatabase qcdb,EnsEQcdatabaseClass qcdbc)1060 AjBool ensQcdatabaseSetClass(EnsPQcdatabase qcdb,
1061 EnsEQcdatabaseClass qcdbc)
1062 {
1063 if (!qcdb)
1064 return ajFalse;
1065
1066 qcdb->Class = qcdbc;
1067
1068 return ajTrue;
1069 }
1070
1071
1072
1073
1074 /* @func ensQcdatabaseSetDatabaseadaptorGroup *********************************
1075 **
1076 ** Set the Ensembl Database Adaptor Group enumeration member of an
1077 ** Ensembl Quality Check Database.
1078 **
1079 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1080 ** @param [u] dbag [EnsEDatabaseadaptorGroup]
1081 ** Ensembl Database Adaptor Group enumeration
1082 **
1083 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1084 **
1085 ** @release 6.4.0
1086 ** @@
1087 ******************************************************************************/
1088
ensQcdatabaseSetDatabaseadaptorGroup(EnsPQcdatabase qcdb,EnsEDatabaseadaptorGroup dbag)1089 AjBool ensQcdatabaseSetDatabaseadaptorGroup(EnsPQcdatabase qcdb,
1090 EnsEDatabaseadaptorGroup dbag)
1091 {
1092 if (!qcdb)
1093 return ajFalse;
1094
1095 qcdb->DatabaseadaptorGroup = dbag;
1096
1097 return ajTrue;
1098 }
1099
1100
1101
1102
1103 /* @func ensQcdatabaseSetDatabaseadaptorSpecies *******************************
1104 **
1105 ** Set the Ensembl Database Adaptor species member of an
1106 ** Ensembl Quality Check Database.
1107 **
1108 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1109 ** @param [u] dbaspecies [AjPStr] Ensembl Database Adaptor species
1110 **
1111 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1112 **
1113 ** @release 6.4.0
1114 ** @@
1115 ******************************************************************************/
1116
ensQcdatabaseSetDatabaseadaptorSpecies(EnsPQcdatabase qcdb,AjPStr dbaspecies)1117 AjBool ensQcdatabaseSetDatabaseadaptorSpecies(EnsPQcdatabase qcdb,
1118 AjPStr dbaspecies)
1119 {
1120 if (!qcdb)
1121 return ajFalse;
1122
1123 ajStrDel(&qcdb->DatabaseadaptorSpecies);
1124
1125 qcdb->DatabaseadaptorSpecies = ajStrNewRef(dbaspecies);
1126
1127 return ajTrue;
1128 }
1129
1130
1131
1132
1133 /* @func ensQcdatabaseSetDate *************************************************
1134 **
1135 ** Set the date member of an Ensembl Quality Check Database.
1136 **
1137 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1138 ** @param [u] date [AjPStr] Date
1139 **
1140 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1141 **
1142 ** @release 6.2.0
1143 ** @@
1144 ******************************************************************************/
1145
ensQcdatabaseSetDate(EnsPQcdatabase qcdb,AjPStr date)1146 AjBool ensQcdatabaseSetDate(EnsPQcdatabase qcdb,
1147 AjPStr date)
1148 {
1149 if (!qcdb)
1150 return ajFalse;
1151
1152 ajStrDel(&qcdb->Date);
1153
1154 qcdb->Date = ajStrNewRef(date);
1155
1156 return ajTrue;
1157 }
1158
1159
1160
1161
1162 /* @func ensQcdatabaseSetDirectory ********************************************
1163 **
1164 ** Set the directory member of an Ensembl Quality Check Database.
1165 **
1166 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1167 ** @param [u] directory [AjPStr] Directory
1168 **
1169 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1170 **
1171 ** @release 6.2.0
1172 ** @@
1173 ******************************************************************************/
1174
ensQcdatabaseSetDirectory(EnsPQcdatabase qcdb,AjPStr directory)1175 AjBool ensQcdatabaseSetDirectory(EnsPQcdatabase qcdb,
1176 AjPStr directory)
1177 {
1178 if (!qcdb)
1179 return ajFalse;
1180
1181 ajStrDel(&qcdb->Directory);
1182
1183 qcdb->Directory = ajStrNewRef(directory);
1184
1185 return ajTrue;
1186 }
1187
1188
1189
1190
1191 /* @func ensQcdatabaseSetFile *************************************************
1192 **
1193 ** Set the file member of an Ensembl Quality Check Database.
1194 **
1195 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1196 ** @param [u] file [AjPStr] File
1197 **
1198 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1199 **
1200 ** @release 6.2.0
1201 ** @@
1202 ******************************************************************************/
1203
ensQcdatabaseSetFile(EnsPQcdatabase qcdb,AjPStr file)1204 AjBool ensQcdatabaseSetFile(EnsPQcdatabase qcdb,
1205 AjPStr file)
1206 {
1207 if (!qcdb)
1208 return ajFalse;
1209
1210 ajStrDel(&qcdb->File);
1211
1212 qcdb->File = ajStrNewRef(file);
1213
1214 return ajTrue;
1215 }
1216
1217
1218
1219
1220 /* @func ensQcdatabaseSetFormat ***********************************************
1221 **
1222 ** Set the format member of an Ensembl Quality Check Database.
1223 **
1224 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1225 ** @param [u] format [AjPStr] Format
1226 **
1227 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1228 **
1229 ** @release 6.2.0
1230 ** @@
1231 ******************************************************************************/
1232
ensQcdatabaseSetFormat(EnsPQcdatabase qcdb,AjPStr format)1233 AjBool ensQcdatabaseSetFormat(EnsPQcdatabase qcdb,
1234 AjPStr format)
1235 {
1236 if (!qcdb)
1237 return ajFalse;
1238
1239 ajStrDel(&qcdb->Format);
1240
1241 qcdb->Format = ajStrNewRef(format);
1242
1243 return ajTrue;
1244 }
1245
1246
1247
1248
1249 /* @func ensQcdatabaseSetHost *************************************************
1250 **
1251 ** Set the host member of an Ensembl Quality Check Database.
1252 **
1253 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1254 ** @param [u] host [AjPStr] Host
1255 **
1256 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1257 **
1258 ** @release 6.2.0
1259 ** @@
1260 ******************************************************************************/
1261
ensQcdatabaseSetHost(EnsPQcdatabase qcdb,AjPStr host)1262 AjBool ensQcdatabaseSetHost(EnsPQcdatabase qcdb,
1263 AjPStr host)
1264 {
1265 if (!qcdb)
1266 return ajFalse;
1267
1268 ajStrDel(&qcdb->Host);
1269
1270 qcdb->Host = ajStrNewRef(host);
1271
1272 return ajTrue;
1273 }
1274
1275
1276
1277
1278 /* @func ensQcdatabaseSetIdentifier *******************************************
1279 **
1280 ** Set the SQL database-internal identifier member of an
1281 ** Ensembl Quality Check Database.
1282 **
1283 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1284 ** @param [r] identifier [ajuint] SQL database-internal identifier
1285 **
1286 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1287 **
1288 ** @release 6.2.0
1289 ** @@
1290 ******************************************************************************/
1291
ensQcdatabaseSetIdentifier(EnsPQcdatabase qcdb,ajuint identifier)1292 AjBool ensQcdatabaseSetIdentifier(EnsPQcdatabase qcdb,
1293 ajuint identifier)
1294 {
1295 if (!qcdb)
1296 return ajFalse;
1297
1298 qcdb->Identifier = identifier;
1299
1300 return ajTrue;
1301 }
1302
1303
1304
1305
1306 /* @func ensQcdatabaseSetName *************************************************
1307 **
1308 ** Set the name member of an Ensembl Quality Check Database.
1309 **
1310 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1311 ** @param [u] name [AjPStr] Name
1312 **
1313 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1314 **
1315 ** @release 6.2.0
1316 ** @@
1317 ******************************************************************************/
1318
ensQcdatabaseSetName(EnsPQcdatabase qcdb,AjPStr name)1319 AjBool ensQcdatabaseSetName(EnsPQcdatabase qcdb,
1320 AjPStr name)
1321 {
1322 if (!qcdb)
1323 return ajFalse;
1324
1325 ajStrDel(&qcdb->Name);
1326
1327 qcdb->Name = ajStrNewRef(name);
1328
1329 return ajTrue;
1330 }
1331
1332
1333
1334
1335 /* @func ensQcdatabaseSetRelease **********************************************
1336 **
1337 ** Set the release member of an Ensembl Quality Check Database.
1338 **
1339 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1340 ** @param [u] release [AjPStr] Release
1341 **
1342 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1343 **
1344 ** @release 6.2.0
1345 ** @@
1346 ******************************************************************************/
1347
ensQcdatabaseSetRelease(EnsPQcdatabase qcdb,AjPStr release)1348 AjBool ensQcdatabaseSetRelease(EnsPQcdatabase qcdb,
1349 AjPStr release)
1350 {
1351 if (!qcdb)
1352 return ajFalse;
1353
1354 ajStrDel(&qcdb->Release);
1355
1356 qcdb->Release = ajStrNewRef(release);
1357
1358 return ajTrue;
1359 }
1360
1361
1362
1363
1364 /* @func ensQcdatabaseSetType *************************************************
1365 **
1366 ** Set the type member of an Ensembl Quality Check Database.
1367 **
1368 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1369 ** @param [u] qcdbt [EnsEQcdatabaseType] Type
1370 **
1371 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1372 **
1373 ** @release 6.2.0
1374 ** @@
1375 ******************************************************************************/
1376
ensQcdatabaseSetType(EnsPQcdatabase qcdb,EnsEQcdatabaseType qcdbt)1377 AjBool ensQcdatabaseSetType(EnsPQcdatabase qcdb,
1378 EnsEQcdatabaseType qcdbt)
1379 {
1380 if (!qcdb)
1381 return ajFalse;
1382
1383 qcdb->Type = qcdbt;
1384
1385 return ajTrue;
1386 }
1387
1388
1389
1390
1391 /* @func ensQcdatabaseSetUrlExternal ******************************************
1392 **
1393 ** Set the external URL member of an Ensembl Quality Check Database.
1394 **
1395 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1396 ** @param [u] url [AjPStr] External URL
1397 **
1398 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1399 **
1400 ** @release 6.4.0
1401 ** @@
1402 ******************************************************************************/
1403
ensQcdatabaseSetUrlExternal(EnsPQcdatabase qcdb,AjPStr url)1404 AjBool ensQcdatabaseSetUrlExternal(EnsPQcdatabase qcdb,
1405 AjPStr url)
1406 {
1407 if (!qcdb)
1408 return ajFalse;
1409
1410 ajStrDel(&qcdb->UrlExternal);
1411
1412 qcdb->UrlExternal = ajStrNewRef(url);
1413
1414 return ajTrue;
1415 }
1416
1417
1418
1419
1420 /* @func ensQcdatabaseSetUrlInternal ******************************************
1421 **
1422 ** Set the internal URL member of an Ensembl Quality Check Database.
1423 **
1424 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
1425 ** @param [u] url [AjPStr] Internal URL
1426 **
1427 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1428 **
1429 ** @release 6.4.0
1430 ** @@
1431 ******************************************************************************/
1432
ensQcdatabaseSetUrlInternal(EnsPQcdatabase qcdb,AjPStr url)1433 AjBool ensQcdatabaseSetUrlInternal(EnsPQcdatabase qcdb,
1434 AjPStr url)
1435 {
1436 if (!qcdb)
1437 return ajFalse;
1438
1439 ajStrDel(&qcdb->UrlInternal);
1440
1441 qcdb->UrlInternal = ajStrNewRef(url);
1442
1443 return ajTrue;
1444 }
1445
1446
1447
1448
1449 /* @section debugging *********************************************************
1450 **
1451 ** Functions for reporting of an Ensembl Quality Check Database object.
1452 **
1453 ** @fdata [EnsPQcdatabase]
1454 **
1455 ** @nam3rule Trace Report Ensembl Quality Check Database members to debug file
1456 **
1457 ** @argrule Trace qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
1458 ** @argrule Trace level [ajuint] Indentation level
1459 **
1460 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
1461 **
1462 ** @fcategory misc
1463 ******************************************************************************/
1464
1465
1466
1467
1468 /* @func ensQcdatabaseTrace ***************************************************
1469 **
1470 ** Trace an Ensembl Quality Check Database.
1471 **
1472 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
1473 ** @param [r] level [ajuint] Indentation level
1474 **
1475 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
1476 **
1477 ** @release 6.2.0
1478 ** @@
1479 ******************************************************************************/
1480
ensQcdatabaseTrace(const EnsPQcdatabase qcdb,ajuint level)1481 AjBool ensQcdatabaseTrace(const EnsPQcdatabase qcdb, ajuint level)
1482 {
1483 AjPStr indent = NULL;
1484
1485 if (!qcdb)
1486 return ajFalse;
1487
1488 indent = ajStrNew();
1489
1490 ajStrAppendCountK(&indent, ' ', level * 2);
1491
1492 ajDebug("%SensQcdatabaseTrace %p\n"
1493 "%S Use %u\n"
1494 "%S Identifier %u\n"
1495 "%S Adaptor %p\n"
1496 "%S Analysis %p\n"
1497 "%S Name '%S'\n"
1498 "%S Release '%S'\n"
1499 "%S Date '%S'\n"
1500 "%S Format '%S'\n"
1501 "%S Class %d\n"
1502 "%S Type %d\n"
1503 "%S DatabaseadaptorSpecies '%S'\n"
1504 "%S DatabaseadaptorGroup '%s'\n"
1505 "%S Host '%S'\n"
1506 "%S Directory '%S'\n"
1507 "%S File '%S'\n"
1508 "%S UrlExternal %p\n"
1509 "%S UrlInternal '%S'\n",
1510 indent, qcdb,
1511 indent, qcdb->Use,
1512 indent, qcdb->Identifier,
1513 indent, qcdb->Adaptor,
1514 indent, qcdb->Analysis,
1515 indent, qcdb->Name,
1516 indent, qcdb->Release,
1517 indent, qcdb->Date,
1518 indent, qcdb->Format,
1519 indent, qcdb->Class,
1520 indent, qcdb->Type,
1521 indent, qcdb->DatabaseadaptorSpecies,
1522 indent, ensDatabaseadaptorGroupToChar(qcdb->DatabaseadaptorGroup),
1523 indent, qcdb->Host,
1524 indent, qcdb->Directory,
1525 indent, qcdb->File,
1526 indent, qcdb->UrlExternal,
1527 indent, qcdb->UrlInternal);
1528
1529 ensAnalysisTrace(qcdb->Analysis, 1);
1530
1531 ajStrDel(&indent);
1532
1533 return ajTrue;
1534 }
1535
1536
1537
1538
1539 /* @section calculate *********************************************************
1540 **
1541 ** Functions for calculating information from an
1542 ** Ensembl Quality Check Database object.
1543 **
1544 ** @fdata [EnsPQcdatabase]
1545 **
1546 ** @nam3rule Calculate Calculate Ensembl Quality Check Database information
1547 ** @nam4rule Memsize Calculate the memory size in bytes
1548 **
1549 ** @argrule * qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
1550 **
1551 ** @valrule Memsize [size_t] Memory size in bytes or 0
1552 **
1553 ** @fcategory misc
1554 ******************************************************************************/
1555
1556
1557
1558
1559 /* @func ensQcdatabaseCalculateMemsize ****************************************
1560 **
1561 ** Calculate the memory size in bytes of an Ensembl Quality Check Database.
1562 **
1563 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
1564 **
1565 ** @return [size_t] Memory size in bytes or 0
1566 **
1567 ** @release 6.4.0
1568 ** @@
1569 ******************************************************************************/
1570
ensQcdatabaseCalculateMemsize(const EnsPQcdatabase qcdb)1571 size_t ensQcdatabaseCalculateMemsize(const EnsPQcdatabase qcdb)
1572 {
1573 size_t size = 0;
1574
1575 if (!qcdb)
1576 return 0;
1577
1578 size += sizeof (EnsOQcdatabase);
1579
1580 size += ensAnalysisCalculateMemsize(qcdb->Analysis);
1581
1582 if (qcdb->Name)
1583 {
1584 size += sizeof (AjOStr);
1585
1586 size += ajStrGetRes(qcdb->Name);
1587 }
1588
1589 if (qcdb->Release)
1590 {
1591 size += sizeof (AjOStr);
1592
1593 size += ajStrGetRes(qcdb->Release);
1594 }
1595
1596 if (qcdb->Date)
1597 {
1598 size += sizeof (AjOStr);
1599
1600 size += ajStrGetRes(qcdb->Date);
1601 }
1602
1603 if (qcdb->Format)
1604 {
1605 size += sizeof (AjOStr);
1606
1607 size += ajStrGetRes(qcdb->Format);
1608 }
1609
1610 if (qcdb->DatabaseadaptorSpecies)
1611 {
1612 size += sizeof (AjOStr);
1613
1614 size += ajStrGetRes(qcdb->DatabaseadaptorSpecies);
1615 }
1616
1617 if (qcdb->Host)
1618 {
1619 size += sizeof (AjOStr);
1620
1621 size += ajStrGetRes(qcdb->Host);
1622 }
1623
1624 if (qcdb->Directory)
1625 {
1626 size += sizeof (AjOStr);
1627
1628 size += ajStrGetRes(qcdb->Directory);
1629 }
1630
1631 if (qcdb->File)
1632 {
1633 size += sizeof (AjOStr);
1634
1635 size += ajStrGetRes(qcdb->File);
1636 }
1637
1638 if (qcdb->UrlExternal)
1639 {
1640 size += sizeof (AjOStr);
1641
1642 size += ajStrGetRes(qcdb->UrlExternal);
1643 }
1644
1645 if (qcdb->UrlInternal)
1646 {
1647 size += sizeof (AjOStr);
1648
1649 size += ajStrGetRes(qcdb->UrlInternal);
1650 }
1651
1652 return size;
1653 }
1654
1655
1656
1657
1658 /* @section matching **********************************************************
1659 **
1660 ** Functions for matching Ensembl Quality Check Database objects
1661 **
1662 ** @fdata [EnsPQcdatabase]
1663 **
1664 ** @nam3rule Match Compare two Ensembl Quality Check Database objects
1665 **
1666 ** @argrule * qcdb1 [const EnsPQcdatabase] Ensembl Quality Check Database
1667 ** @argrule * qcdb2 [const EnsPQcdatabase] Ensembl Quality Check Database
1668 **
1669 ** @valrule * [AjBool] True on success
1670 **
1671 ** @fcategory use
1672 ******************************************************************************/
1673
1674
1675
1676
1677 /* @func ensQcdatabaseMatch ***************************************************
1678 **
1679 ** Tests for matching two Ensembl Quality Check Database objects.
1680 **
1681 ** @param [r] qcdb1 [const EnsPQcdatabase]
1682 ** First Ensembl Quality Check Database
1683 ** @param [r] qcdb2 [const EnsPQcdatabase]
1684 ** Second Ensembl Quality Check Database
1685 **
1686 ** @return [AjBool] ajTrue if the Ensembl Quality Check Database objects
1687 ** are equal
1688 **
1689 ** @release 6.2.0
1690 ** @@
1691 ** The comparison is based on initial pointer equality and if that fails
1692 ** each member is compared.
1693 ******************************************************************************/
1694
ensQcdatabaseMatch(const EnsPQcdatabase qcdb1,const EnsPQcdatabase qcdb2)1695 AjBool ensQcdatabaseMatch(const EnsPQcdatabase qcdb1,
1696 const EnsPQcdatabase qcdb2)
1697 {
1698 if (!qcdb1)
1699 return ajFalse;
1700
1701 if (!qcdb2)
1702 return ajFalse;
1703
1704 if (qcdb1 == qcdb2)
1705 return ajTrue;
1706
1707 if (qcdb1->Identifier != qcdb2->Identifier)
1708 return ajFalse;
1709
1710 if ((qcdb1->Adaptor && qcdb2->Adaptor) &&
1711 (qcdb1->Adaptor != qcdb2->Adaptor))
1712 return ajFalse;
1713
1714 if (!ajStrMatchCaseS(qcdb1->Name, qcdb2->Name))
1715 return ajFalse;
1716
1717 if (!ajStrMatchCaseS(qcdb1->Release, qcdb2->Release))
1718 return ajFalse;
1719
1720 if (!ajStrMatchCaseS(qcdb1->Date, qcdb2->Date))
1721 return ajFalse;
1722
1723 if (!ajStrMatchCaseS(qcdb1->Format, qcdb2->Format))
1724 return ajFalse;
1725
1726 if (qcdb1->Class != qcdb2->Class)
1727 return ajFalse;
1728
1729 if (qcdb1->Type != qcdb2->Type)
1730 return ajFalse;
1731
1732 if (!ajStrMatchCaseS(qcdb1->DatabaseadaptorSpecies,
1733 qcdb2->DatabaseadaptorSpecies))
1734 return ajFalse;
1735
1736 if (qcdb1->DatabaseadaptorGroup != qcdb2->DatabaseadaptorGroup)
1737 return ajFalse;
1738
1739 if (!ajStrMatchCaseS(qcdb1->Host, qcdb2->Host))
1740 return ajFalse;
1741
1742 if (!ajStrMatchCaseS(qcdb1->Directory, qcdb2->Directory))
1743 return ajFalse;
1744
1745 if (!ajStrMatchCaseS(qcdb1->File, qcdb2->File))
1746 return ajFalse;
1747
1748 if (!ajStrMatchCaseS(qcdb1->UrlExternal, qcdb2->UrlExternal))
1749 return ajFalse;
1750
1751 if (!ajStrMatchCaseS(qcdb1->UrlInternal, qcdb2->UrlInternal))
1752 return ajFalse;
1753
1754 return ajTrue;
1755 }
1756
1757
1758
1759
1760 /* @datasection [EnsEQcdatabaseClass] Ensembl Quality Check Database Class ****
1761 **
1762 ** @nam2rule Qcdatabase Functions for manipulating
1763 ** Ensembl Quality Check Database objects
1764 ** @nam3rule QcdatabaseClass Functions for manipulating
1765 ** Ensembl Quality Check Database Class enumerations
1766 **
1767 ******************************************************************************/
1768
1769
1770
1771
1772 /* @section Misc **************************************************************
1773 **
1774 ** Functions for returning an Ensembl Quality Check Database Class enumeration.
1775 **
1776 ** @fdata [EnsEQcdatabaseClass]
1777 **
1778 ** @nam4rule From Ensembl Quality Check Database Class query
1779 ** @nam5rule Str AJAX String object query
1780 **
1781 ** @argrule Str classstr [const AjPStr] Class string
1782 **
1783 ** @valrule * [EnsEQcdatabaseClass]
1784 ** Ensembl Quality Check Database Class enumeration or ensEQcdatabaseClassNULL
1785 **
1786 ** @fcategory misc
1787 ******************************************************************************/
1788
1789
1790
1791
1792 /* @func ensQcdatabaseClassFromStr ********************************************
1793 **
1794 ** Convert an AJAX String into an
1795 ** Ensembl Quality Check Database Class enumeration.
1796 **
1797 ** @param [r] classstr [const AjPStr] Class string
1798 **
1799 ** @return [EnsEQcdatabaseClass]
1800 ** Ensembl Quality Check Database Class or ensEQcdatabaseClassNULL
1801 **
1802 ** @release 6.2.0
1803 ** @@
1804 ******************************************************************************/
1805
ensQcdatabaseClassFromStr(const AjPStr classstr)1806 EnsEQcdatabaseClass ensQcdatabaseClassFromStr(const AjPStr classstr)
1807 {
1808 register EnsEQcdatabaseClass i = ensEQcdatabaseClassNULL;
1809
1810 EnsEQcdatabaseClass qcdbc = ensEQcdatabaseClassNULL;
1811
1812 for (i = ensEQcdatabaseClassNULL;
1813 qcdatabaseKClass[i];
1814 i++)
1815 if (ajStrMatchCaseC(classstr, qcdatabaseKClass[i]))
1816 qcdbc = i;
1817
1818 if (!qcdbc)
1819 ajDebug("ensQcdatabaseClassFromStr encountered "
1820 "unexpected string '%S'.\n", classstr);
1821
1822 return qcdbc;
1823 }
1824
1825
1826
1827
1828 /* @section Cast **************************************************************
1829 **
1830 ** Functions for returning attributes of an
1831 ** Ensembl Quality Check Database Class enumeration.
1832 **
1833 ** @fdata [EnsEQcdatabaseClass]
1834 **
1835 ** @nam4rule To Return Ensembl Quality Check Database Class enumeration
1836 ** @nam5rule Char Return C character string value
1837 **
1838 ** @argrule To qcdbc [EnsEQcdatabaseClass]
1839 ** Ensembl Quality Check Database Class enumeration
1840 **
1841 ** @valrule Char [const char*] Class or NULL
1842 **
1843 ** @fcategory cast
1844 ******************************************************************************/
1845
1846
1847
1848
1849 /* @func ensQcdatabaseClassToChar *********************************************
1850 **
1851 ** Convert an Ensembl Quality Check Database Class enumeration into a
1852 ** C-type (char *) string.
1853 **
1854 ** @param [u] qcdbc [EnsEQcdatabaseClass]
1855 ** Ensembl Quality Check Database Class enumeration
1856 **
1857 ** @return [const char*]
1858 ** Ensembl Quality Check Database Class C-type (char *) string
1859 ** or NULL
1860 **
1861 ** @release 6.2.0
1862 ** @@
1863 ******************************************************************************/
1864
ensQcdatabaseClassToChar(EnsEQcdatabaseClass qcdbc)1865 const char* ensQcdatabaseClassToChar(EnsEQcdatabaseClass qcdbc)
1866 {
1867 register EnsEQcdatabaseClass i = ensEQcdatabaseClassNULL;
1868
1869 for (i = ensEQcdatabaseClassNULL;
1870 qcdatabaseKClass[i] && (i < qcdbc);
1871 i++);
1872
1873 if (!qcdatabaseKClass[i])
1874 ajDebug("ensQcdatabaseClassToChar "
1875 "encountered an out of boundary error on "
1876 "Ensembl Quality Check Database Class "
1877 "enumeration %d.\n",
1878 qcdbc);
1879
1880 return qcdatabaseKClass[i];
1881 }
1882
1883
1884
1885
1886 /* @datasection [EnsEQcdatabaseType] Ensembl Quality Check Database Type ******
1887 **
1888 ** @nam2rule Qcdatabase Functions for manipulating
1889 ** Ensembl Quality Check Database objects
1890 ** @nam3rule QcdatabaseType Functions for manipulating
1891 ** Ensembl Quality Check Database Type enumerations
1892 **
1893 ******************************************************************************/
1894
1895
1896
1897
1898 /* @section Misc **************************************************************
1899 **
1900 ** Functions for returning an Ensembl Quality Check Database Type enumeration.
1901 **
1902 ** @fdata [EnsEQcdatabaseType]
1903 **
1904 ** @nam4rule From Ensembl Quality Check Database Type query
1905 ** @nam5rule Str AJAX String object query
1906 **
1907 ** @argrule Str typestr [const AjPStr] Type string
1908 **
1909 ** @valrule * [EnsEQcdatabaseType]
1910 ** Ensembl Quality Check Database Type enumeration or ensEQcdatabaseTypeNULL
1911 **
1912 ** @fcategory misc
1913 ******************************************************************************/
1914
1915
1916
1917
1918 /* @func ensQcdatabaseTypeFromStr *********************************************
1919 **
1920 ** Convert an AJAX String into an
1921 ** Ensembl Quality Check Database Type enumeration.
1922 **
1923 ** @param [r] typestr [const AjPStr] Type string
1924 **
1925 ** @return [EnsEQcdatabaseType]
1926 ** Ensembl Quality Check Database Type enumeration or ensEQcdatabaseTypeNULL
1927 **
1928 ** @release 6.2.0
1929 ** @@
1930 ******************************************************************************/
1931
ensQcdatabaseTypeFromStr(const AjPStr typestr)1932 EnsEQcdatabaseType ensQcdatabaseTypeFromStr(const AjPStr typestr)
1933 {
1934 register EnsEQcdatabaseType i = ensEQcdatabaseTypeNULL;
1935
1936 EnsEQcdatabaseType qcdbt = ensEQcdatabaseTypeNULL;
1937
1938 for (i = ensEQcdatabaseTypeNULL;
1939 qcdatabaseKType[i];
1940 i++)
1941 if (ajStrMatchCaseC(typestr, qcdatabaseKType[i]))
1942 qcdbt = i;
1943
1944 if (!qcdbt)
1945 ajDebug("ensQcdatabaseTypeFromStr encountered "
1946 "unexpected string '%S'.\n", typestr);
1947
1948 return qcdbt;
1949 }
1950
1951
1952
1953
1954 /* @section Cast **************************************************************
1955 **
1956 ** Functions for returning attributes of an
1957 ** Ensembl Quality Check Database Type enumeration.
1958 **
1959 ** @fdata [EnsEQcdatabaseType]
1960 **
1961 ** @nam4rule To Return Ensembl Quality Check Database Type enumeration
1962 ** @nam5rule Char Return C character string value
1963 **
1964 ** @argrule To qcdbt [EnsEQcdatabaseType]
1965 ** Ensembl Quality Check Database Type enumeration
1966 **
1967 ** @valrule Char [const char*] Class or NULL
1968 **
1969 ** @fcategory cast
1970 ******************************************************************************/
1971
1972
1973
1974
1975 /* @func ensQcdatabaseTypeToChar **********************************************
1976 **
1977 ** Convert an Ensembl Quality Check Database Type enumeration into a
1978 ** C-type (char *) string.
1979 **
1980 ** @param [u] qcdbt [EnsEQcdatabaseType]
1981 ** Ensembl Quality Check Database Type enumeration
1982 **
1983 ** @return [const char*]
1984 ** Ensembl Quality Check Database Type C-type (char *) string or NULL
1985 **
1986 ** @release 6.2.0
1987 ** @@
1988 ******************************************************************************/
1989
ensQcdatabaseTypeToChar(EnsEQcdatabaseType qcdbt)1990 const char* ensQcdatabaseTypeToChar(EnsEQcdatabaseType qcdbt)
1991 {
1992 register EnsEQcdatabaseType i = ensEQcdatabaseTypeNULL;
1993
1994 for (i = ensEQcdatabaseTypeNULL;
1995 qcdatabaseKType[i] && (i < qcdbt);
1996 i++);
1997
1998 if (!qcdatabaseKType[i])
1999 ajDebug("ensQcdatabaseTypeToChar "
2000 "encountered an out of boundary error on "
2001 "Ensembl Quality Check Database Type "
2002 "enumeration %d.\n",
2003 qcdbt);
2004
2005 return qcdatabaseKType[i];
2006 }
2007
2008
2009
2010
2011 /* @datasection [EnsPQcdatabaseadaptor] Ensembl Quality Check Database Adaptor
2012 **
2013 ** @nam2rule Qcdatabaseadaptor Functions for manipulating
2014 ** Ensembl Quality Check Database Adaptor objects
2015 **
2016 ** @cc Bio::EnsEMBL::QC::DBSQL::SequenceDBAdaptor
2017 ** @cc CVS Revision:
2018 ** @cc CVS Tag:
2019 **
2020 ******************************************************************************/
2021
2022
2023
2024
2025 /* @funcstatic qcdatabaseadaptorFetchAllbyStatement ***************************
2026 **
2027 ** Run a SQL statement against an Ensembl Database Adaptor and consolidate the
2028 ** results into an AJAX List of Ensembl Quality Check Database objects.
2029 **
2030 ** @param [u] ba [EnsPBaseadaptor] Ensembl Base Adaptor
2031 ** @param [r] statement [const AjPStr] SQL statement
2032 ** @param [uN] am [EnsPAssemblymapper] Ensembl Assembly Mapper
2033 ** @param [uN] slice [EnsPSlice] Ensembl Slice
2034 ** @param [u] qcdbs [AjPList] AJAX List of
2035 ** Ensembl Quality Check Database objects
2036 **
2037 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2038 **
2039 ** @release 6.4.0
2040 ** @@
2041 ******************************************************************************/
2042
qcdatabaseadaptorFetchAllbyStatement(EnsPBaseadaptor ba,const AjPStr statement,EnsPAssemblymapper am,EnsPSlice slice,AjPList qcdbs)2043 static AjBool qcdatabaseadaptorFetchAllbyStatement(
2044 EnsPBaseadaptor ba,
2045 const AjPStr statement,
2046 EnsPAssemblymapper am,
2047 EnsPSlice slice,
2048 AjPList qcdbs)
2049 {
2050 ajuint identifier = 0U;
2051 ajuint analysisid = 0U;
2052
2053 AjPSqlstatement sqls = NULL;
2054 AjISqlrow sqli = NULL;
2055 AjPSqlrow sqlr = NULL;
2056
2057 AjPStr name = NULL;
2058 AjPStr release = NULL;
2059 AjPStr date = NULL;
2060 AjPStr format = NULL;
2061 AjPStr type = NULL;
2062 AjPStr class = NULL;
2063 AjPStr species = NULL;
2064 AjPStr group = NULL;
2065 AjPStr host = NULL;
2066 AjPStr directory = NULL;
2067 AjPStr file = NULL;
2068 AjPStr externalurl = NULL;
2069
2070 EnsEDatabaseadaptorGroup dbag = ensEDatabaseadaptorGroupNULL;
2071 EnsEQcdatabaseClass qcdbc = ensEQcdatabaseClassNULL;
2072 EnsEQcdatabaseType qcdbt = ensEQcdatabaseTypeNULL;
2073
2074 EnsPAnalysis analysis = NULL;
2075 EnsPAnalysisadaptor aa = NULL;
2076
2077 EnsPDatabaseadaptor dba = NULL;
2078
2079 EnsPQcdatabase qcdb = NULL;
2080 EnsPQcdatabaseadaptor qcdba = NULL;
2081
2082 if (ajDebugTest("qcdatabaseadaptorFetchAllbyStatement"))
2083 ajDebug("qcdatabaseadaptorFetchAllbyStatement\n"
2084 " ba %p\n"
2085 " statement %p\n"
2086 " am %p\n"
2087 " slice %p\n"
2088 " qcdbs %p\n",
2089 ba,
2090 statement,
2091 am,
2092 slice,
2093 qcdbs);
2094
2095 if (!ba)
2096 return ajFalse;
2097
2098 if (!statement)
2099 return ajFalse;
2100
2101 if (!qcdbs)
2102 return ajFalse;
2103
2104 dba = ensBaseadaptorGetDatabaseadaptor(ba);
2105
2106 aa = ensRegistryGetAnalysisadaptor(dba);
2107 qcdba = ensRegistryGetQcdatabaseadaptor(dba);
2108
2109 sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
2110
2111 sqli = ajSqlrowiterNew(sqls);
2112
2113 while (!ajSqlrowiterDone(sqli))
2114 {
2115 identifier = 0;
2116 analysisid = 0;
2117 name = ajStrNew();
2118 release = ajStrNew();
2119 date = ajStrNew();
2120 format = ajStrNew();
2121 type = ajStrNew();
2122 class = ajStrNew();
2123 species = ajStrNew();
2124 group = ajStrNew();
2125 host = ajStrNew();
2126 directory = ajStrNew();
2127 file = ajStrNew();
2128 externalurl = ajStrNew();
2129
2130 sqlr = ajSqlrowiterGet(sqli);
2131
2132 ajSqlcolumnToUint(sqlr, &identifier);
2133 ajSqlcolumnToUint(sqlr, &analysisid);
2134 ajSqlcolumnToStr(sqlr, &name);
2135 ajSqlcolumnToStr(sqlr, &release);
2136 ajSqlcolumnToStr(sqlr, &date);
2137 ajSqlcolumnToStr(sqlr, &format);
2138 ajSqlcolumnToStr(sqlr, &type);
2139 ajSqlcolumnToStr(sqlr, &class);
2140 ajSqlcolumnToStr(sqlr, &species);
2141 ajSqlcolumnToStr(sqlr, &group);
2142 ajSqlcolumnToStr(sqlr, &host);
2143 ajSqlcolumnToStr(sqlr, &directory);
2144 ajSqlcolumnToStr(sqlr, &file);
2145 ajSqlcolumnToStr(sqlr, &externalurl);
2146
2147 ensAnalysisadaptorFetchByIdentifier(aa, analysisid, &analysis);
2148
2149 qcdbt = ensQcdatabaseTypeFromStr(type);
2150
2151 qcdbc = ensQcdatabaseClassFromStr(class);
2152
2153 dbag = ensDatabaseadaptorGroupFromStr(group);
2154
2155 qcdb = ensQcdatabaseNewIni(qcdba,
2156 identifier,
2157 analysis,
2158 name,
2159 release,
2160 date,
2161 format,
2162 qcdbc,
2163 qcdbt,
2164 species,
2165 dbag,
2166 host,
2167 directory,
2168 file,
2169 externalurl);
2170
2171 ajListPushAppend(qcdbs, (void *) qcdb);
2172
2173 ensAnalysisDel(&analysis);
2174
2175 ajStrDel(&name);
2176 ajStrDel(&release);
2177 ajStrDel(&date);
2178 ajStrDel(&format);
2179 ajStrDel(&type);
2180 ajStrDel(&class);
2181 ajStrDel(&species);
2182 ajStrDel(&group);
2183 ajStrDel(&host);
2184 ajStrDel(&directory);
2185 ajStrDel(&file);
2186 ajStrDel(&externalurl);
2187 }
2188
2189 ajSqlrowiterDel(&sqli);
2190
2191 ensDatabaseadaptorSqlstatementDel(dba, &sqls);
2192
2193 return ajTrue;
2194 }
2195
2196
2197
2198
2199 /* @funcstatic qcdatabaseadaptorCacheInsert ***********************************
2200 **
2201 ** Insert an Ensembl Quality Check Database into the
2202 ** Ensembl Quality Check Database Adaptor-internal cache.
2203 ** If an Ensembl Quality Check Database with the same name member is already
2204 ** present in the adaptor cache, the Ensembl Quality Check Database is deleted
2205 ** and a pointer to the cached Ensembl Quality Check Database is returned.
2206 **
2207 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
2208 ** Ensembl Quality Check Database Adaptor
2209 ** @param [u] Pqcdb [EnsPQcdatabase*] Ensembl Quality Check Database address
2210 **
2211 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2212 **
2213 ** @release 6.3.0
2214 ** @@
2215 ******************************************************************************/
2216
qcdatabaseadaptorCacheInsert(EnsPQcdatabaseadaptor qcdba,EnsPQcdatabase * Pqcdb)2217 static AjBool qcdatabaseadaptorCacheInsert(EnsPQcdatabaseadaptor qcdba,
2218 EnsPQcdatabase *Pqcdb)
2219 {
2220 ajuint *Pidentifier = NULL;
2221
2222 AjPStr key = NULL;
2223
2224 EnsPQcdatabase qcdb1 = NULL;
2225 EnsPQcdatabase qcdb2 = NULL;
2226
2227 if (!qcdba)
2228 return ajFalse;
2229
2230 if (!qcdba->CacheByIdentifier)
2231 return ajFalse;
2232
2233 if (!qcdba->CacheByName)
2234 return ajFalse;
2235
2236 if (!Pqcdb)
2237 return ajFalse;
2238
2239 if (!*Pqcdb)
2240 return ajFalse;
2241
2242 /* Search the identifer cache. */
2243
2244 qcdb1 = (EnsPQcdatabase) ajTableFetchmodV(
2245 qcdba->CacheByIdentifier,
2246 (const void *) &((*Pqcdb)->Identifier));
2247
2248 /* Search the name cache. */
2249
2250 key = ajFmtStr("%S:%S", (*Pqcdb)->Name, (*Pqcdb)->Release);
2251
2252 qcdb2 = (EnsPQcdatabase) ajTableFetchmodS(qcdba->CacheByName, key);
2253
2254 if ((!qcdb1) && (!qcdb2))
2255 {
2256 /* Insert into the identifier cache. */
2257
2258 AJNEW0(Pidentifier);
2259
2260 *Pidentifier = (*Pqcdb)->Identifier;
2261
2262 ajTablePut(qcdba->CacheByIdentifier,
2263 (void *) Pidentifier,
2264 (void *) ensQcdatabaseNewRef(*Pqcdb));
2265
2266 /* Insert into the name cache. */
2267
2268 ajTablePut(qcdba->CacheByName,
2269 (void *) ajStrNewS(key),
2270 (void *) ensQcdatabaseNewRef(*Pqcdb));
2271 }
2272
2273 if (qcdb1 && qcdb2 && (qcdb1 == qcdb2))
2274 {
2275 ajDebug("qcdatabaseadaptorCacheInsert replaced "
2276 "Ensembl Quality Check Database %p with "
2277 "one already cached %p.\n",
2278 *Pqcdb, qcdb1);
2279
2280 ensQcdatabaseDel(Pqcdb);
2281
2282 Pqcdb = &qcdb1;
2283 }
2284
2285 if (qcdb1 && qcdb2 && (qcdb1 != qcdb2))
2286 ajDebug("qcdatabaseadaptorCacheInsert detected "
2287 "Ensembl Quality Check Database objects in the "
2288 "identifier and name cache with identical names "
2289 "('%S' and '%S') but different addresses (%p and %p).\n",
2290 qcdb1->Name, qcdb2->Name, qcdb1, qcdb2);
2291
2292 if (qcdb1 && (!qcdb2))
2293 ajDebug("qcdatabaseadaptorCacheInsert detected an "
2294 "Ensembl Quality Check Database "
2295 "in the identifier, but not in the name cache.\n");
2296
2297 if ((!qcdb1) && qcdb2)
2298 ajDebug("qcdatabaseadaptorCacheInsert detected an "
2299 "Ensembl Quality Check Database "
2300 "in the name, but not in the identifier cache.\n");
2301
2302 ajStrDel(&key);
2303
2304 return ajTrue;
2305 }
2306
2307
2308
2309
2310 /* @funcstatic qcdatabaseadaptorCacheRemove ***********************************
2311 **
2312 ** Remove an Ensembl Quality Check Database from the
2313 ** Ensembl Quality Check Database Adaptor-internal cache.
2314 **
2315 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
2316 ** Ensembl Quality Check Database Adaptor
2317 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
2318 **
2319 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2320 **
2321 ** @release 6.4.0
2322 ** @@
2323 ******************************************************************************/
2324
qcdatabaseadaptorCacheRemove(EnsPQcdatabaseadaptor qcdba,EnsPQcdatabase qcdb)2325 static AjBool qcdatabaseadaptorCacheRemove(EnsPQcdatabaseadaptor qcdba,
2326 EnsPQcdatabase qcdb)
2327 {
2328 EnsPQcdatabase qcdb1 = NULL;
2329 EnsPQcdatabase qcdb2 = NULL;
2330
2331 if (!qcdba)
2332 return ajFalse;
2333
2334 if (!qcdb)
2335 return ajFalse;
2336
2337 /* Remove the table nodes. */
2338
2339 qcdb1 = (EnsPQcdatabase) ajTableRemove(
2340 qcdba->CacheByIdentifier,
2341 (const void *) &qcdb->Identifier);
2342
2343 qcdb2 = (EnsPQcdatabase) ajTableRemove(
2344 qcdba->CacheByName,
2345 (const void *) qcdb->Name);
2346
2347 if (qcdb1 && (!qcdb2))
2348 ajWarn("qcdatabaseadaptorCacheRemove could remove "
2349 "Ensembl Quality Check Database "
2350 "with identifier %u and name '%S' only from the identifier "
2351 "cache.\n",
2352 qcdb->Identifier,
2353 qcdb->Name);
2354
2355 if ((!qcdb1) && qcdb2)
2356 ajWarn("qcdatabaseadaptorCacheRemove could remove "
2357 "Ensembl Quality Check Database "
2358 "with identifier %u and name '%S' only from the name cache.\n",
2359 qcdb->Identifier,
2360 qcdb->Name);
2361
2362 ensQcdatabaseDel(&qcdb1);
2363 ensQcdatabaseDel(&qcdb2);
2364
2365 return ajTrue;
2366 }
2367
2368
2369
2370
2371 /* @funcstatic qcdatabaseadaptorCacheInit *************************************
2372 **
2373 ** Initialise the internal Quality Check Database cache of an
2374 ** Ensembl Quality Check Database Adaptor.
2375 **
2376 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
2377 ** Ensembl Quality Check Database Adaptor
2378 **
2379 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2380 **
2381 ** @release 6.3.0
2382 ** @@
2383 ******************************************************************************/
2384
qcdatabaseadaptorCacheInit(EnsPQcdatabaseadaptor qcdba)2385 static AjBool qcdatabaseadaptorCacheInit(EnsPQcdatabaseadaptor qcdba)
2386 {
2387 AjBool result = AJFALSE;
2388
2389 AjPList qcdbs = NULL;
2390
2391 EnsPQcdatabase qcdb = NULL;
2392
2393 if (!qcdba)
2394 return ajFalse;
2395
2396 if (qcdba->CacheByIdentifier)
2397 return ajFalse;
2398 else
2399 {
2400 qcdba->CacheByIdentifier = ajTableuintNew(0U);
2401
2402 ajTableSetDestroyvalue(
2403 qcdba->CacheByIdentifier,
2404 (void (*)(void **)) &ensQcdatabaseDel);
2405 }
2406
2407 if (qcdba->CacheByName)
2408 return ajFalse;
2409 else
2410 {
2411 qcdba->CacheByName = ajTablestrNew(0U);
2412
2413 ajTableSetDestroyvalue(
2414 qcdba->CacheByName,
2415 (void (*)(void **)) &ensQcdatabaseDel);
2416 }
2417
2418 qcdbs = ajListNew();
2419
2420 result = ensBaseadaptorFetchAllbyConstraint(
2421 ensQcdatabaseadaptorGetBaseadaptor(qcdba),
2422 (const AjPStr) NULL,
2423 (EnsPAssemblymapper) NULL,
2424 (EnsPSlice) NULL,
2425 qcdbs);
2426
2427 while (ajListPop(qcdbs, (void **) &qcdb))
2428 {
2429 qcdatabaseadaptorCacheInsert(qcdba, &qcdb);
2430
2431 ensQcdatabaseDel(&qcdb);
2432 }
2433
2434 ajListFree(&qcdbs);
2435
2436 return result;
2437 }
2438
2439
2440
2441
2442 /* @section constructors ******************************************************
2443 **
2444 ** All constructors return a new Ensembl Quality Check Database Adaptor by
2445 ** pointer. It is the responsibility of the user to first destroy any previous
2446 ** Quality Check Database Adaptor. The target pointer does not need to be
2447 ** initialised to NULL, but it is good programming practice to do so anyway.
2448 **
2449 ** @fdata [EnsPQcdatabaseadaptor]
2450 **
2451 ** @nam3rule New Constructor
2452 **
2453 ** @argrule New dba [EnsPDatabaseadaptor] Ensembl Database Adaptor
2454 **
2455 ** @valrule * [EnsPQcdatabaseadaptor]
2456 ** Ensembl Quality Check Database Adaptor or NULL
2457 **
2458 ** @fcategory new
2459 ******************************************************************************/
2460
2461
2462
2463
2464 /* @func ensQcdatabaseadaptorNew **********************************************
2465 **
2466 ** Default constructor for an Ensembl Quality Check Database Adaptor.
2467 **
2468 ** Ensembl Object Adaptors are singleton objects in the sense that a single
2469 ** instance of an Ensembl Object Adaptor connected to a particular database is
2470 ** sufficient to instantiate any number of Ensembl Objects from the database.
2471 ** Each Ensembl Object will have a weak reference to the Object Adaptor that
2472 ** instantiated it. Therefore, Ensembl Object Adaptors should not be
2473 ** instantiated directly, but rather obtained from the Ensembl Registry,
2474 ** which will in turn call this function if neccessary.
2475 **
2476 ** @see ensRegistryGetDatabaseadaptor
2477 ** @see ensRegistryGetQcdatabaseadaptor
2478 **
2479 ** @param [u] dba [EnsPDatabaseadaptor] Ensembl Database Adaptor
2480 **
2481 ** @return [EnsPQcdatabaseadaptor]
2482 ** Ensembl Quality Check Database Adaptor or NULL
2483 **
2484 ** @release 6.2.0
2485 ** @@
2486 ******************************************************************************/
2487
ensQcdatabaseadaptorNew(EnsPDatabaseadaptor dba)2488 EnsPQcdatabaseadaptor ensQcdatabaseadaptorNew(
2489 EnsPDatabaseadaptor dba)
2490 {
2491 EnsPQcdatabaseadaptor qcdba = NULL;
2492
2493 if (!dba)
2494 return NULL;
2495
2496 AJNEW0(qcdba);
2497
2498 qcdba->Adaptor = ensBaseadaptorNew(
2499 dba,
2500 qcdatabaseadaptorKTablenames,
2501 qcdatabaseadaptorKColumnnames,
2502 (const EnsPBaseadaptorLeftjoin) NULL,
2503 (const char *) NULL,
2504 (const char *) NULL,
2505 &qcdatabaseadaptorFetchAllbyStatement);
2506
2507 /*
2508 ** NOTE: The cache cannot be initialised here because the
2509 ** qcdatabaseadaptorCacheInit function calls
2510 ** ensBaseadaptorFetchAllbyConstraint, which calls
2511 ** qcdatabaseadaptorFetchAllbyStatement, which calls
2512 ** ensRegistryGetQcdatabaseadaptor. At that point, however, the
2513 ** Ensembl Quality Check Database Adaptor has not been stored in the
2514 ** Ensembl Registry. Therefore, each ensQcdatabaseadaptorFetch function has
2515 ** to test the presence of the adaptor-internal cache and eventually
2516 ** initialise before accessing it.
2517 **
2518 ** qcdatabaseadaptorCacheInit(qcdba);
2519 */
2520
2521 return qcdba;
2522 }
2523
2524
2525
2526
2527 /* @section destructors *******************************************************
2528 **
2529 ** Destruction destroys all internal data structures and frees the memory
2530 ** allocated for an Ensembl Quality Check Database Adaptor object.
2531 **
2532 ** @fdata [EnsPQcdatabaseadaptor]
2533 **
2534 ** @nam3rule Del Destroy (free) an Ensembl Quality Check Database Adaptor
2535 **
2536 ** @argrule * Pqcdba [EnsPQcdatabaseadaptor*]
2537 ** Ensembl Quality Check Database Adaptor address
2538 **
2539 ** @valrule * [void]
2540 **
2541 ** @fcategory delete
2542 ******************************************************************************/
2543
2544
2545
2546
2547 /* @func ensQcdatabaseadaptorDel **********************************************
2548 **
2549 ** Default destructor for an Ensembl Quality Check Database Adaptor.
2550 **
2551 ** Ensembl Object Adaptors are singleton objects that are registered in the
2552 ** Ensembl Registry and weakly referenced by Ensembl Objects that have been
2553 ** instantiated by it. Therefore, Ensembl Object Adaptors should never be
2554 ** destroyed directly. Upon exit, the Ensembl Registry will call this function
2555 ** if required.
2556 **
2557 ** @param [d] Pqcdba [EnsPQcdatabaseadaptor*]
2558 ** Ensembl Quality Check Database Adaptor address
2559 **
2560 ** @return [void]
2561 **
2562 ** @release 6.2.0
2563 ** @@
2564 ******************************************************************************/
2565
ensQcdatabaseadaptorDel(EnsPQcdatabaseadaptor * Pqcdba)2566 void ensQcdatabaseadaptorDel(EnsPQcdatabaseadaptor *Pqcdba)
2567 {
2568 EnsPQcdatabaseadaptor pthis = NULL;
2569
2570 if (!Pqcdba)
2571 return;
2572
2573 #if defined(AJ_DEBUG) && AJ_DEBUG >= 1
2574 if (ajDebugTest("ensQcdatabaseadaptorDel"))
2575 ajDebug("ensQcdatabaseadaptorDel\n"
2576 " *Pqcdba %p\n",
2577 *Pqcdba);
2578 #endif /* defined(AJ_DEBUG) && AJ_DEBUG >= 1 */
2579
2580 if (!(pthis = *Pqcdba))
2581 return;
2582
2583 ajTableDel(&pthis->CacheByIdentifier);
2584 ajTableDel(&pthis->CacheByName);
2585
2586 ensBaseadaptorDel(&pthis->Adaptor);
2587
2588 ajMemFree((void **) Pqcdba);
2589
2590 return;
2591 }
2592
2593
2594
2595
2596 /* @section member retrieval **************************************************
2597 **
2598 ** Functions for returning members of an
2599 ** Ensembl Quality Check Database Adaptor object.
2600 **
2601 ** @fdata [EnsPQcdatabaseadaptor]
2602 **
2603 ** @nam3rule Get Return Ensembl Quality Check Database Adaptor attribute(s)
2604 ** @nam4rule Baseadaptor Return the Ensembl Base Adaptor
2605 ** @nam4rule Databaseadaptor Return the Ensembl Database Adaptor
2606 **
2607 ** @argrule * qcdba [EnsPQcdatabaseadaptor]
2608 ** Ensembl Quality Check Database Adaptor
2609 **
2610 ** @valrule Baseadaptor [EnsPBaseadaptor] Ensembl Base Adaptor or NULL
2611 ** @valrule Databaseadaptor [EnsPDatabaseadaptor] Ensembl Database Adaptor
2612 ** or NULL
2613 **
2614 ** @fcategory use
2615 ******************************************************************************/
2616
2617
2618
2619
2620 /* @func ensQcdatabaseadaptorGetBaseadaptor ***********************************
2621 **
2622 ** Get the Ensembl Base Adaptor member of an
2623 ** Ensembl Quality Check Database Adaptor.
2624 **
2625 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
2626 ** Ensembl Quality Check Database Adaptor
2627 **
2628 ** @return [EnsPBaseadaptor] Ensembl Base Adaptor or NULL
2629 **
2630 ** @release 6.4.0
2631 ** @@
2632 ******************************************************************************/
2633
ensQcdatabaseadaptorGetBaseadaptor(EnsPQcdatabaseadaptor qcdba)2634 EnsPBaseadaptor ensQcdatabaseadaptorGetBaseadaptor(
2635 EnsPQcdatabaseadaptor qcdba)
2636 {
2637 return (qcdba) ? qcdba->Adaptor : NULL;
2638 }
2639
2640
2641
2642
2643 /* @func ensQcdatabaseadaptorGetDatabaseadaptor *******************************
2644 **
2645 ** Get the Ensembl Database Adaptor member of an
2646 ** Ensembl Quality Check Database Adaptor.
2647 **
2648 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
2649 ** Ensembl Quality Check Database Adaptor
2650 **
2651 ** @return [EnsPDatabaseadaptor] Ensembl Database Adaptor or NULL
2652 **
2653 ** @release 6.4.0
2654 ** @@
2655 ******************************************************************************/
2656
ensQcdatabaseadaptorGetDatabaseadaptor(EnsPQcdatabaseadaptor qcdba)2657 EnsPDatabaseadaptor ensQcdatabaseadaptorGetDatabaseadaptor(
2658 EnsPQcdatabaseadaptor qcdba)
2659 {
2660 return ensBaseadaptorGetDatabaseadaptor(
2661 ensQcdatabaseadaptorGetBaseadaptor(qcdba));
2662 }
2663
2664
2665
2666
2667 /* @section object retrieval **************************************************
2668 **
2669 ** Functions for fetching Ensembl Quality Check Database objects from an
2670 ** Ensembl SQL database.
2671 **
2672 ** @fdata [EnsPQcdatabaseadaptor]
2673 **
2674 ** @nam3rule Fetch Fetch Ensembl Quality Check Database object(s)
2675 ** @nam4rule All Fetch all Ensembl Quality Check Database objects
2676 ** @nam4rule Allby Fetch all Ensembl Quality Check Database objects matching
2677 ** a criterion
2678 ** @nam5rule Classtype Fetch all by a class and type
2679 ** @nam4rule By Fetch one Ensembl Quality Check Database object matching
2680 ** a criterion
2681 ** @nam5rule Identifier Fetch by an SQL database internal identifier
2682 ** @nam5rule Name Fetch by a name
2683 **
2684 ** @argrule * qcdba [EnsPQcdatabaseadaptor]
2685 ** Ensembl Quality Check Database Adaptor
2686 ** @argrule All qcdbs [AjPList] AJAX List of
2687 ** Ensembl Quality Check Database objects
2688 ** @argrule AllbyClasstype qcdbc [EnsEQcdatabaseClass]
2689 ** Ensembl Quality Check Database Class enumeration
2690 ** @argrule AllbyClasstype qcdbt [EnsEQcdatabaseType]
2691 ** Ensembl Quality Check Database Type enumeration
2692 ** @argrule AllbyClasstype qcdbs [AjPList] AJAX List of
2693 ** Ensembl Quality Check Database objects
2694 ** @argrule ByIdentifier identifier [ajuint] SQL database-internal identifier
2695 ** @argrule ByName name [const AjPStr]
2696 ** Ensembl Quality Check Database name
2697 ** @argrule ByName release [const AjPStr]
2698 ** Ensembl Quality Check Database release
2699 ** @argrule By Pqcdb [EnsPQcdatabase*] Ensembl Quality Check Database address
2700 **
2701 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
2702 **
2703 ** @fcategory use
2704 ******************************************************************************/
2705
2706
2707
2708
2709 /* @func ensQcdatabaseadaptorFetchAllbyClasstype ******************************
2710 **
2711 ** Fetch an Ensembl Quality Check Database by its class and type.
2712 **
2713 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
2714 ** Ensembl Quality Check Database Adaptor
2715 ** @param [u] qcdbc [EnsEQcdatabaseClass]
2716 ** Ensembl Quality Check Database Class enumeration
2717 ** @param [u] qcdbt [EnsEQcdatabaseType]
2718 ** Ensembl Quality Check Database Type enumeration
2719 ** @param [u] qcdbs [AjPList] AJAX List of
2720 ** Ensembl Quality Check Database objects
2721 **
2722 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2723 **
2724 ** @release 6.4.0
2725 ** @@
2726 ******************************************************************************/
2727
ensQcdatabaseadaptorFetchAllbyClasstype(EnsPQcdatabaseadaptor qcdba,EnsEQcdatabaseClass qcdbc,EnsEQcdatabaseType qcdbt,AjPList qcdbs)2728 AjBool ensQcdatabaseadaptorFetchAllbyClasstype(EnsPQcdatabaseadaptor qcdba,
2729 EnsEQcdatabaseClass qcdbc,
2730 EnsEQcdatabaseType qcdbt,
2731 AjPList qcdbs)
2732 {
2733 void **keyarray = NULL;
2734 void **valarray = NULL;
2735
2736 register ajuint i = 0U;
2737
2738 AjBool cmatch = AJFALSE;
2739 AjBool tmatch = AJFALSE;
2740
2741 if (!qcdba)
2742 return ajFalse;
2743
2744 if (!qcdbs)
2745 return ajFalse;
2746
2747 if (!qcdba->CacheByIdentifier)
2748 qcdatabaseadaptorCacheInit(qcdba);
2749
2750 ajTableToarrayKeysValues(qcdba->CacheByIdentifier, &keyarray, &valarray);
2751
2752 for (i = 0U; keyarray[i]; i++)
2753 {
2754 /* Match the class member if one has been provided. */
2755
2756 if (qcdbc)
2757 {
2758 if (((EnsPQcdatabase) valarray[i])->Class == qcdbc)
2759 cmatch = ajTrue;
2760 else
2761 cmatch = ajFalse;
2762 }
2763 else
2764 cmatch = ajTrue;
2765
2766 /* Match the type member if one has been provided. */
2767
2768 if (qcdbt)
2769 {
2770 if (((EnsPQcdatabase) valarray[i])->Type == qcdbt)
2771 tmatch = ajTrue;
2772 else
2773 tmatch = ajFalse;
2774 }
2775 else
2776 tmatch = ajTrue;
2777
2778 if (cmatch && tmatch)
2779 ajListPushAppend(qcdbs, (void *)
2780 ensQcdatabaseNewRef(valarray[i]));
2781 }
2782
2783 AJFREE(keyarray);
2784 AJFREE(valarray);
2785
2786 return ajTrue;
2787 }
2788
2789
2790
2791
2792 /* @func ensQcdatabaseadaptorFetchByIdentifier ********************************
2793 **
2794 ** Fetch an Ensembl Quality Check Database by its
2795 ** SQL database-internal identifier.
2796 **
2797 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
2798 ** Ensembl Quality Check Database Adaptor
2799 ** @param [r] identifier [ajuint] SQL database-internal identifier
2800 ** @param [wP] Pqcdb [EnsPQcdatabase*] Ensembl Quality Check Database address
2801 **
2802 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2803 **
2804 ** @release 6.2.0
2805 ** @@
2806 ******************************************************************************/
2807
ensQcdatabaseadaptorFetchByIdentifier(EnsPQcdatabaseadaptor qcdba,ajuint identifier,EnsPQcdatabase * Pqcdb)2808 AjBool ensQcdatabaseadaptorFetchByIdentifier(EnsPQcdatabaseadaptor qcdba,
2809 ajuint identifier,
2810 EnsPQcdatabase *Pqcdb)
2811 {
2812 AjBool result = AJFALSE;
2813
2814 if (!qcdba)
2815 return ajFalse;
2816
2817 if (!Pqcdb)
2818 return ajFalse;
2819
2820 *Pqcdb = NULL;
2821
2822 if (!qcdba->CacheByIdentifier)
2823 qcdatabaseadaptorCacheInit(qcdba);
2824
2825 /*
2826 ** Initially, search the identifier cache.
2827 ** For any object returned by the AJAX Table the reference counter needs
2828 ** to be incremented manually.
2829 */
2830
2831 *Pqcdb = (EnsPQcdatabase) ajTableFetchmodV(qcdba->CacheByIdentifier,
2832 (const void *) &identifier);
2833
2834 if (*Pqcdb)
2835 {
2836 ensQcdatabaseNewRef(*Pqcdb);
2837
2838 return ajTrue;
2839 }
2840
2841 /* For a cache miss re-query the database. */
2842
2843 result = ensBaseadaptorFetchByIdentifier(
2844 ensQcdatabaseadaptorGetBaseadaptor(qcdba),
2845 identifier,
2846 (void **) Pqcdb);
2847
2848 qcdatabaseadaptorCacheInsert(qcdba, Pqcdb);
2849
2850 return result;
2851 }
2852
2853
2854
2855
2856 /* @func ensQcdatabaseadaptorFetchByName **************************************
2857 **
2858 ** Fetch an Ensembl Quality Check Database by its name and release.
2859 **
2860 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
2861 ** Ensembl Quality Check Database Adaptor
2862 ** @param [r] name [const AjPStr] Ensembl Quality Check Database name
2863 ** @param [r] release [const AjPStr] Ensembl Quality Check Database release
2864 ** @param [wP] Pqcdb [EnsPQcdatabase*] Ensembl Quality Check Database address
2865 **
2866 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
2867 **
2868 ** @release 6.2.0
2869 ** @@
2870 ******************************************************************************/
2871
ensQcdatabaseadaptorFetchByName(EnsPQcdatabaseadaptor qcdba,const AjPStr name,const AjPStr release,EnsPQcdatabase * Pqcdb)2872 AjBool ensQcdatabaseadaptorFetchByName(EnsPQcdatabaseadaptor qcdba,
2873 const AjPStr name,
2874 const AjPStr release,
2875 EnsPQcdatabase *Pqcdb)
2876 {
2877 char *txtname = NULL;
2878 char *txtrelease = NULL;
2879
2880 AjBool result = AJFALSE;
2881
2882 AjPList qcdbs = NULL;
2883
2884 AjPStr key = NULL;
2885 AjPStr constraint = NULL;
2886
2887 EnsPBaseadaptor ba = NULL;
2888
2889 EnsPQcdatabase qcdb = NULL;
2890
2891 if (!qcdba)
2892 return ajFalse;
2893
2894 if ((!name) && (!ajStrGetLen(name)))
2895 return ajFalse;
2896
2897 if ((!release) && (!ajStrGetLen(release)))
2898 return ajFalse;
2899
2900 if (!Pqcdb)
2901 return ajFalse;
2902
2903 *Pqcdb = NULL;
2904
2905 if (!qcdba->CacheByName)
2906 qcdatabaseadaptorCacheInit(qcdba);
2907
2908 /*
2909 ** Initially, search the name cache.
2910 ** For any object returned by the AJAX Table the reference counter needs
2911 ** to be incremented manually.
2912 */
2913
2914 key = ajFmtStr("%S:%S", name, release);
2915
2916 *Pqcdb = (EnsPQcdatabase) ajTableFetchmodS(qcdba->CacheByName, key);
2917
2918 ajStrDel(&key);
2919
2920 if (*Pqcdb)
2921 {
2922 ensQcdatabaseNewRef(*Pqcdb);
2923
2924 return ajTrue;
2925 }
2926
2927 /* In case of a cache miss, query the database. */
2928
2929 ba = ensQcdatabaseadaptorGetBaseadaptor(qcdba);
2930
2931 ensBaseadaptorEscapeC(ba, &txtname, name);
2932 ensBaseadaptorEscapeC(ba, &txtrelease, release);
2933
2934 constraint = ajFmtStr("sequence_db.name = '%s' "
2935 "AND "
2936 "sequence_db.release = '%s'",
2937 txtname,
2938 txtrelease);
2939
2940 ajCharDel(&txtname);
2941 ajCharDel(&txtrelease);
2942
2943 qcdbs = ajListNew();
2944
2945 result = ensBaseadaptorFetchAllbyConstraint(
2946 ba,
2947 constraint,
2948 (EnsPAssemblymapper) NULL,
2949 (EnsPSlice) NULL,
2950 qcdbs);
2951
2952 if (ajListGetLength(qcdbs) > 1)
2953 ajWarn("ensQcdatabaseadaptorFetchByName got more than "
2954 "one Ensembl Quality Check Database for (UNIQUE) name '%S' "
2955 "and release '%S'.\n", name, release);
2956
2957 ajListPop(qcdbs, (void **) Pqcdb);
2958
2959 qcdatabaseadaptorCacheInsert(qcdba, Pqcdb);
2960
2961 while (ajListPop(qcdbs, (void **) &qcdb))
2962 {
2963 qcdatabaseadaptorCacheInsert(qcdba, &qcdb);
2964
2965 ensQcdatabaseDel(&qcdb);
2966 }
2967
2968 ajListFree(&qcdbs);
2969
2970 ajStrDel(&constraint);
2971
2972 return result;
2973 }
2974
2975
2976
2977
2978 /* @section object access *****************************************************
2979 **
2980 ** Functions for accessing Ensembl Quality Check Database objects in an
2981 ** Ensembl SQL database.
2982 **
2983 ** @fdata [EnsPQcdatabaseadaptor]
2984 **
2985 ** @nam3rule Delete Delete Ensembl Quality Check Database object(s)
2986 ** @nam3rule Store Store Ensembl Quality Check Database object(s)
2987 ** @nam3rule Update Update Ensembl Quality Check Database object(s)
2988 **
2989 ** @argrule * qcdba [EnsPQcdatabaseadaptor]
2990 ** Ensembl Quality Check Database Adaptor
2991 ** @argrule Delete qcdb [EnsPQcdatabase]
2992 ** Ensembl Quality Check Database
2993 ** @argrule Store qcdb [EnsPQcdatabase]
2994 ** Ensembl Quality Check Database
2995 ** @argrule Update qcdb [const EnsPQcdatabase]
2996 ** Ensembl Quality Check Database
2997 **
2998 ** @valrule * [AjBool] ajTrue upon success, ajFalse otherwise
2999 **
3000 ** @fcategory use
3001 ******************************************************************************/
3002
3003
3004
3005
3006 /* @func ensQcdatabaseadaptorDelete *******************************************
3007 **
3008 ** Delete an Ensembl Quality Check Database.
3009 **
3010 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
3011 ** Ensembl Quality Check Database Adaptor
3012 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
3013 **
3014 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
3015 **
3016 ** @release 6.2.0
3017 ** @@
3018 ******************************************************************************/
3019
ensQcdatabaseadaptorDelete(EnsPQcdatabaseadaptor qcdba,EnsPQcdatabase qcdb)3020 AjBool ensQcdatabaseadaptorDelete(EnsPQcdatabaseadaptor qcdba,
3021 EnsPQcdatabase qcdb)
3022 {
3023 AjBool result = AJFALSE;
3024
3025 AjPSqlstatement sqls = NULL;
3026
3027 AjPStr statement = NULL;
3028
3029 EnsPDatabaseadaptor dba = NULL;
3030
3031 if (!qcdba)
3032 return ajFalse;
3033
3034 if (!qcdb)
3035 return ajFalse;
3036
3037 if (!ensQcdatabaseGetIdentifier(qcdb))
3038 return ajFalse;
3039
3040 /* Remove this object from the cache. */
3041
3042 qcdatabaseadaptorCacheRemove(qcdba, qcdb);
3043
3044 dba = ensQcdatabaseadaptorGetDatabaseadaptor(qcdba);
3045
3046 statement = ajFmtStr(
3047 "DELETE FROM "
3048 "sequence_db "
3049 "WHERE "
3050 "sequence_db.sequence_db_id = %u",
3051 qcdb->Identifier);
3052
3053 sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
3054
3055 if (ajSqlstatementGetAffectedrows(sqls))
3056 {
3057 qcdb->Adaptor = NULL;
3058 qcdb->Identifier = 0U;
3059
3060 result = ajTrue;
3061 }
3062
3063 ensDatabaseadaptorSqlstatementDel(dba, &sqls);
3064
3065 ajStrDel(&statement);
3066
3067 return result;
3068 }
3069
3070
3071
3072
3073 /* @func ensQcdatabaseadaptorStore ********************************************
3074 **
3075 ** Store an Ensembl Quality Check Database.
3076 **
3077 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
3078 ** Ensembl Quality Check Database Adaptor
3079 ** @param [u] qcdb [EnsPQcdatabase] Ensembl Quality Check Database
3080 **
3081 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
3082 **
3083 ** @release 6.2.0
3084 ** @@
3085 ******************************************************************************/
3086
ensQcdatabaseadaptorStore(EnsPQcdatabaseadaptor qcdba,EnsPQcdatabase qcdb)3087 AjBool ensQcdatabaseadaptorStore(EnsPQcdatabaseadaptor qcdba,
3088 EnsPQcdatabase qcdb)
3089 {
3090 char *txtname = NULL;
3091 char *txtrelease = NULL;
3092 char *txtdate = NULL;
3093 char *txtformat = NULL;
3094 char *txtspecies = NULL;
3095 char *txthost = NULL;
3096 char *txtdirectory = NULL;
3097 char *txtfile = NULL;
3098 char *txtexternalurl = NULL;
3099
3100 AjBool result = AJFALSE;
3101
3102 AjPSqlstatement sqls = NULL;
3103
3104 AjPStr statement = NULL;
3105
3106 EnsPDatabaseadaptor dba = NULL;
3107
3108 if (!qcdba)
3109 return ajFalse;
3110
3111 if (!qcdb)
3112 return ajFalse;
3113
3114 if (ensQcdatabaseGetAdaptor(qcdb) &&
3115 ensQcdatabaseGetIdentifier(qcdb))
3116 return ajFalse;
3117
3118 dba = ensQcdatabaseadaptorGetDatabaseadaptor(qcdba);
3119
3120 ensDatabaseadaptorEscapeC(dba, &txtname, qcdb->Name);
3121 ensDatabaseadaptorEscapeC(dba, &txtrelease, qcdb->Release);
3122 ensDatabaseadaptorEscapeC(dba, &txtdate, qcdb->Date);
3123 ensDatabaseadaptorEscapeC(dba, &txtformat, qcdb->Format);
3124 ensDatabaseadaptorEscapeC(dba, &txtspecies, qcdb->DatabaseadaptorSpecies);
3125 ensDatabaseadaptorEscapeC(dba, &txthost, qcdb->Host);
3126 ensDatabaseadaptorEscapeC(dba, &txtdirectory, qcdb->Directory);
3127 ensDatabaseadaptorEscapeC(dba, &txtfile, qcdb->File);
3128 ensDatabaseadaptorEscapeC(dba, &txtexternalurl, qcdb->UrlExternal);
3129
3130 statement = ajFmtStr(
3131 "INSERT IGNORE INTO "
3132 "sequence_db "
3133 "SET "
3134 "sequence_db.analysis_id = %u, "
3135 "sequence_db.name = '%s', "
3136 "sequence_db.dbrelease = '%s', "
3137 "sequence_db.date = '%s', "
3138 "sequence_db.format = '%s' "
3139 "sequence_db.type = '%s', "
3140 "sequence_db.class = '%s', "
3141 "sequence_db.species = '%s', "
3142 "sequence_db.dbgroup = '%s', "
3143 "sequence_db.host = '%s', "
3144 "sequence_db.directory = '%s', "
3145 "sequence_db.file = '%s', "
3146 "sequence_db.external_url = '%s'",
3147 ensAnalysisGetIdentifier(qcdb->Analysis),
3148 txtname,
3149 txtrelease,
3150 txtdate,
3151 txtformat,
3152 ensQcdatabaseTypeToChar(qcdb->Type),
3153 ensQcdatabaseClassToChar(qcdb->Class),
3154 txtspecies,
3155 ensDatabaseadaptorGroupToChar(qcdb->DatabaseadaptorGroup),
3156 txthost,
3157 txtdirectory,
3158 txtfile,
3159 txtexternalurl);
3160
3161 ajCharDel(&txtname);
3162 ajCharDel(&txtrelease);
3163 ajCharDel(&txtdate);
3164 ajCharDel(&txtformat);
3165 ajCharDel(&txtspecies);
3166 ajCharDel(&txthost);
3167 ajCharDel(&txtdirectory);
3168 ajCharDel(&txtfile);
3169 ajCharDel(&txtexternalurl);
3170
3171 sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
3172
3173 if (ajSqlstatementGetAffectedrows(sqls))
3174 {
3175 ensQcdatabaseSetIdentifier(qcdb, ajSqlstatementGetIdentifier(sqls));
3176
3177 ensQcdatabaseSetAdaptor(qcdb, qcdba);
3178
3179 /* Insert into the cache. */
3180
3181 qcdatabaseadaptorCacheInsert(qcdba, &qcdb);
3182
3183 result = ajTrue;
3184 }
3185
3186 ensDatabaseadaptorSqlstatementDel(dba, &sqls);
3187
3188 ajStrDel(&statement);
3189
3190 return result;
3191 }
3192
3193
3194
3195
3196 /* @func ensQcdatabaseadaptorUpdate *******************************************
3197 **
3198 ** Update an Ensembl Quality Check Database.
3199 **
3200 ** @param [u] qcdba [EnsPQcdatabaseadaptor]
3201 ** Ensembl Quality Check Database Adaptor
3202 ** @param [r] qcdb [const EnsPQcdatabase] Ensembl Quality Check Database
3203 **
3204 ** @return [AjBool] ajTrue upon success, ajFalse otherwise
3205 **
3206 ** @release 6.2.0
3207 ** @@
3208 ******************************************************************************/
3209
ensQcdatabaseadaptorUpdate(EnsPQcdatabaseadaptor qcdba,const EnsPQcdatabase qcdb)3210 AjBool ensQcdatabaseadaptorUpdate(EnsPQcdatabaseadaptor qcdba,
3211 const EnsPQcdatabase qcdb)
3212 {
3213 char *txtname = NULL;
3214 char *txtrelease = NULL;
3215 char *txtdate = NULL;
3216 char *txtformat = NULL;
3217 char *txtspecies = NULL;
3218 char *txthost = NULL;
3219 char *txtdirectory = NULL;
3220 char *txtfile = NULL;
3221 char *txtexternalurl = NULL;
3222
3223 AjBool result = AJFALSE;
3224
3225 AjPSqlstatement sqls = NULL;
3226
3227 AjPStr statement = NULL;
3228
3229 EnsPDatabaseadaptor dba = NULL;
3230
3231 if (!qcdba)
3232 return ajFalse;
3233
3234 if (!qcdb)
3235 return ajFalse;
3236
3237 if (!ensQcdatabaseGetIdentifier(qcdb))
3238 return ajFalse;
3239
3240 dba = ensQcdatabaseadaptorGetDatabaseadaptor(qcdba);
3241
3242 ensDatabaseadaptorEscapeC(dba, &txtname, qcdb->Name);
3243 ensDatabaseadaptorEscapeC(dba, &txtrelease, qcdb->Release);
3244 ensDatabaseadaptorEscapeC(dba, &txtdate, qcdb->Date);
3245 ensDatabaseadaptorEscapeC(dba, &txtformat, qcdb->Format);
3246 ensDatabaseadaptorEscapeC(dba, &txtspecies, qcdb->DatabaseadaptorSpecies);
3247 ensDatabaseadaptorEscapeC(dba, &txthost, qcdb->Host);
3248 ensDatabaseadaptorEscapeC(dba, &txtdirectory, qcdb->Directory);
3249 ensDatabaseadaptorEscapeC(dba, &txtfile, qcdb->File);
3250 ensDatabaseadaptorEscapeC(dba, &txtexternalurl, qcdb->UrlExternal);
3251
3252 statement = ajFmtStr(
3253 "UPDATE IGNORE "
3254 "sequence_db "
3255 "SET "
3256 "sequence_db.analysis_id = %u, "
3257 "sequence_db.name = '%s', "
3258 "sequence_db.dbrelease = '%s', "
3259 "sequence_db.date = '%s', "
3260 "sequence_db.format = '%s' "
3261 "sequence_db.type = '%s', "
3262 "sequence_db.class = '%s', "
3263 "sequence_db.species = '%s', "
3264 "sequence_db.dbgroup = '%s', "
3265 "sequence_db.host = '%s', "
3266 "sequence_db.directory = '%s', "
3267 "sequence_db.file = '%s', "
3268 "sequence_db.external_url = '%s' "
3269 "WHERE "
3270 "sequence_db.sequence_db_id = %u",
3271 ensAnalysisGetIdentifier(qcdb->Analysis),
3272 txtname,
3273 txtrelease,
3274 txtdate,
3275 txtformat,
3276 ensQcdatabaseTypeToChar(qcdb->Type),
3277 ensQcdatabaseClassToChar(qcdb->Class),
3278 txtspecies,
3279 ensDatabaseadaptorGroupToChar(qcdb->DatabaseadaptorGroup),
3280 txthost,
3281 txtdirectory,
3282 txtfile,
3283 txtexternalurl,
3284 qcdb->Identifier);
3285
3286 ajCharDel(&txtname);
3287 ajCharDel(&txtrelease);
3288 ajCharDel(&txtdate);
3289 ajCharDel(&txtformat);
3290 ajCharDel(&txtspecies);
3291 ajCharDel(&txthost);
3292 ajCharDel(&txtdirectory);
3293 ajCharDel(&txtfile);
3294 ajCharDel(&txtexternalurl);
3295
3296 sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
3297
3298 if (ajSqlstatementGetAffectedrows(sqls))
3299 result = ajTrue;
3300
3301 ensDatabaseadaptorSqlstatementDel(dba, &sqls);
3302
3303 ajStrDel(&statement);
3304
3305 return result;
3306 }
3307