1
2
3 """
4 DB API felületen különböző műveleteket végez
5 a linkgroup adatbázissal
6
7 """
8
10 """
11 Legyalul minden adatot az adatbázisból, hogy
12 tiszta lappal kezdhessünk.
13
14 @type db: db.Connection
15 @param db: Adatbázis kapcsolat
16
17 """
18
19
20 cur = db.cursor()
21
22
23
24 cur.execute("""
25 DELETE FROM people
26 """)
27
28
29 db.commit()
30
32 """
33 Betölti a bemeneti gráf éleit a bemeneti fájlból
34 és behelyezi az adatokat az adatbázisba.
35 A fájl egy-egy sora az él végpontjainak neveit
36 tartalmazza.
37
38 @type fn: string
39 @param fn: A bemeneti fájl neve
40 @type db: db.Connection
41 @param db: Adatbázis kapcsolat
42
43 """
44
45
46 pairs = map(
47 lambda x: x.split(),
48 filter(
49 lambda l: l,
50 map(
51 lambda l: l.strip(),
52 file(fn).readlines()
53 )
54 )
55 )
56
57
58
59
60
61 people = set()
62 for a, b in pairs:
63 people.add(a)
64 people.add(b)
65
66
67 people = list(people)
68
69
70 cur = db.cursor()
71
72 cur.executemany("""
73 INSERT INTO people (name) VALUES (%s)
74 """,
75 people
76 )
77
78
79 cur.executemany("""
80 INSERT INTO connections (author_1, author_2)
81 SELECT p1.id, p2.id
82 FROM people p1, people p2
83 WHERE p1.name = %s
84 AND p2.name = %s
85 """,
86 pairs
87 )
88
89
90 db.commit()
91
93 """
94 Kiszámolja és frissíti az adatbázisban az egyes
95 emberek kapcsolatainak számát (fokszámát).
96
97 @type db: db.Connection
98 @param db: Adatbázis kapcsolat
99
100 """
101
102 cur = db.cursor()
103
104 cur.execute("""
105 UPDATE
106 people p
107 JOIN (
108 SELECT id, COUNT(*) deg
109 FROM (
110 SELECT author_1 AS id FROM connections
111 UNION ALL
112 SELECT author_2 AS id FROM connections
113 ) t
114 GROUP BY id
115 ) degTable
116 ON
117 p.id = degTable.id
118 SET
119 p.deg = degTable.deg
120 """)
121
122
123 db.commit()
124
125
126 IDD_ID = 0
127 IDD_DEG = 1
128
130 """
131 Visszaadja az embereket és fokszámaikat fokszám szerint csökkenő
132 sorrendben rendezve.
133
134 Feltételezi, hogy a fokszámok már ki vannak számolva
135 (ehhez meg kellet hívni a L{calcDegree} függvényt).
136
137 @type db: db.Connection
138 @param db: Adatbázis kapcsolat
139
140 @rtype: (azonosító, fokszám) lista
141 @return: Az emberek és fokszámaik.
142
143 """
144
145 cur = db.cursor()
146
147 cur.execute("""
148 SELECT id, deg FROM people ORDER BY deg DESC
149 """)
150
151
152
153
154 return cur.fetchall()
155
157 """
158 Kitörli az adatbázisból azokat az embereket, akiknek
159 a fokszáma kisebb, mint minDeg.
160
161 Feltételezi, hogy a fokszámok már ki vannak számolva
162 (ehhez meg kellet hívni a L{calcDegree} függvényt).
163 A függvény meghívása után az adatbázisban érvénytelen fokszámok
164 fognak szerepelni, ezért érdemes lehet utána újból
165 meghívni a L{calcDegree} függvényt.
166
167 @type db: db.Connection
168 @param db: Adatbázis kapcsola
169 @type minDeg: number
170 @param minDeg: Túléléshez szükséges minimális fokszám
171
172 """
173
174 cur = db.cursor()
175
176 cur.execute("""
177 DELETE FROM people WHERE deg <= %s
178 """,
179 minDeg
180 )
181
182
183 db.commit()
184