File: deductive_closure.sqlapi

package info (click to toggle)
libchado-perl 1.23-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 23,976 kB
  • ctags: 10,378
  • sloc: xml: 192,540; sql: 165,945; perl: 28,339; sh: 101; python: 73; makefile: 46
file content (56 lines) | stat: -rw-r--r-- 1,931 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
CREATE TYPE closure_result AS (cvterm_id INTEGER, pathdistance INTEGER);

DECLARE FUNCTION closure_over_is_a(cvterm_id INTEGER) RETURNS SETOF INTEGER;

COMMENT ON FUNCTION closure_over_is_a(INTEGER) IS 'Performs the
deductive closure over the is_a relation. Returns every cvterm_id
which is a direct or indirect is_a parent of the input term.

Implements the rule:
X is_a Z <= X is_a Y, Y is_a Z   [transitive]
';

DECLARE FUNCTION closure_over_reflexive_is_a(cvterm_id INTEGER) RETURNS SETOF INTEGER;

COMMENT ON FUNCTION closure_over_reflexive_is_a(INTEGER) IS 'Performs the
deductive closure over the is_a relation, treating the is_a relation as reflexive. i.e.

X is_a X  [reflexive]
';

DECLARE FUNCTION closure_over_relation(cvterm_id INTEGER, 
                                       relation_cvterm_id INTEGER) 
        RETURNS SETOF INTEGER;

DECLARE FUNCTION closure_over_relation_with_dist(cvterm_id INTEGER, 
                                                 relation_cvterm_id INTEGER) 
        RETURNS SETOF closure_result;

COMMENT ON FUNCTION closure_over_relation_with_dist(INTEGER,INTEGER) IS
'Performs the deductive closure over non-is_a transitive relation (eg
part_of). Returns every cvterm_id which is a direct or indirect is_a
parent of the input term.

Implements the rules:
X R Z <= X R Y, Y R Z     [transitive]
X R Z <= X is_a[transitive] Y, Y R Z
X R Z <= X R Y, Y is_a[transitive] Z

For example, if we have

A is_a B, B is_a C, C part_of D, D part_of E, E is_a F, F part_of G, G is_a H

Then A is part_of D, E, F, G, H

In addition, the distance is returned; this is the number of
connecting links of type R (links of type is_a are not counted here)

Note: this function returns a set, so it should be called like this:

  SELECT * FROM closure_over_relation_with_dist( <cvterm_id>, <relation_cvterm_id> );

Note: this will not check to see if the relation has been explicitly declared transitive
';