~launchpad-results/launchpad-results/trunk

« back to all changes in this revision

Viewing changes to lib/lpresults/tracker/schema/tracker/patch_1.py

  • Committer: Marc Tardif
  • Date: 2012-03-21 22:32:04 UTC
  • Revision ID: marc.tardif@canonical.com-20120321223204-8g7mvzzwmh8ifbrt
Added support for getting systems from a person (LP #899361)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2010-2011 Canonical Ltd.  This software is licensed under the
 
2
# GNU Affero General Public License version 3 (see the file LICENSE).
 
3
 
 
4
"""
 
5
Removed sequence functions.
 
6
"""
 
7
 
 
8
statements = [
 
9
"""DROP FUNCTION next_devicebus_product_sequence(INTEGER)""",
 
10
"""DROP FUNCTION next_devicebus_vendor_sequence(INTEGER)""",
 
11
"""DROP FUNCTION next_system_sequence(INTEGER)""",
 
12
"""
 
13
CREATE OR REPLACE FUNCTION systemunit_insert_before() RETURNS TRIGGER
 
14
LANGUAGE plpgsql AS
 
15
$$
 
16
BEGIN
 
17
    UPDATE system SET counter = counter + 1
 
18
        WHERE id = NEW.system RETURNING counter INTO NEW.sequence;
 
19
 
 
20
    RETURN NEW;
 
21
END
 
22
$$
 
23
""",
 
24
"""
 
25
CREATE OR REPLACE FUNCTION systemunit_insert_after() RETURNS TRIGGER
 
26
LANGUAGE plpgsql AS
 
27
$$
 
28
BEGIN
 
29
    UPDATE devicestate SET date_deleted = NEW.date_created
 
30
        WHERE date_deleted = '3000-01-01'
 
31
        AND system_unit = NEW.id;
 
32
    UPDATE processorstate SET date_deleted = NEW.date_created
 
33
        WHERE date_deleted = '3000-01-01'
 
34
        AND system_unit = NEW.id;
 
35
 
 
36
    RETURN NEW;
 
37
END
 
38
$$
 
39
""",
 
40
"""
 
41
CREATE OR REPLACE FUNCTION deviceproduct_product() RETURNS TRIGGER
 
42
LANGUAGE plpgsql AS
 
43
$$
 
44
BEGIN
 
45
    IF TG_OP = 'INSERT' THEN
 
46
        IF NEW.product IS NULL THEN
 
47
            UPDATE devicebus SET product_counter = product_counter + 1
 
48
                WHERE id = NEW.bus RETURNING product_counter INTO NEW.product;
 
49
        ELSIF NEW.product > x'FFFF'::int THEN
 
50
            RAISE EXCEPTION 'product must be less than 2^16: %s', NEW.product;
 
51
        END IF;
 
52
 
 
53
        IF NEW.text_search_vector IS NULL
 
54
            AND NOT NEW.name IS NULL THEN
 
55
            NEW.text_search_vector := SETWEIGHT(TO_TSVECTOR(
 
56
                'simple', text_as_grams(NEW.name)), 'A');
 
57
        END IF;
 
58
    ELSIF TG_OP = 'UPDATE' THEN
 
59
        IF NOT NEW.product = OLD.product THEN
 
60
            RAISE EXCEPTION 'product cannot be updated';
 
61
        END IF;
 
62
 
 
63
        IF NEW.text_search_vector = OLD.text_search_vector
 
64
            AND NOT NEW.name = OLD.name THEN
 
65
            NEW.text_search_vector := SETWEIGHT(TO_TSVECTOR(
 
66
                'simple', text_as_grams(NEW.name)), 'A');
 
67
        END IF;
 
68
    END IF;
 
69
    RETURN NEW;
 
70
END
 
71
$$
 
72
""",
 
73
"""
 
74
CREATE OR REPLACE FUNCTION devicevendor_vendor() RETURNS TRIGGER
 
75
LANGUAGE plpgsql AS
 
76
$$
 
77
BEGIN
 
78
    IF TG_OP = 'INSERT' THEN
 
79
        IF NEW.vendor IS NULL THEN
 
80
            UPDATE devicebus SET vendor_counter = vendor_counter + 1
 
81
                WHERE id = NEW.bus RETURNING vendor_counter INTO NEW.vendor;
 
82
        ELSIF NEW.vendor > x'FFFF'::int THEN
 
83
            RAISE EXCEPTION 'vendor must be less than 2^16: %s', NEW.vendor;
 
84
        END IF;
 
85
 
 
86
        IF NEW.text_search_vector IS NULL
 
87
            AND NOT NEW.name IS NULL THEN
 
88
            NEW.text_search_vector := SETWEIGHT(TO_TSVECTOR(
 
89
                'simple', text_as_grams(NEW.name)), 'A');
 
90
        END IF;
 
91
    ELSIF TG_OP = 'UPDATE' THEN
 
92
        IF NOT NEW.vendor = OLD.vendor THEN
 
93
            RAISE EXCEPTION 'vendor cannot be updated';
 
94
        END IF;
 
95
 
 
96
        IF NEW.text_search_vector = OLD.text_search_vector
 
97
            AND NOT NEW.name = OLD.name THEN
 
98
            NEW.text_search_vector := SETWEIGHT(TO_TSVECTOR(
 
99
                'simple', text_as_grams(NEW.name)), 'A');
 
100
        END IF;
 
101
    END IF;
 
102
    RETURN NEW;
 
103
END
 
104
$$
 
105
""",
 
106
]
 
107
 
 
108
 
 
109
def apply(store):
 
110
    print __doc__
 
111
    for statement in statements:
 
112
        store.execute(statement)