11"""Parsing PostgreSQL services"""
22
33import psycopg2
4+ from src import sql
45
56
67def build_conn_string (avnadmin_pwd , service_conn_info ):
@@ -82,6 +83,14 @@ def explore_pg(self, service, service_name, project, service_map):
8283 nodes = nodes + new_nodes
8384 edges = edges + new_edges
8485
86+ new_nodes , new_edges = explore_pg_views (cur , service_name )
87+ nodes = nodes + new_nodes
88+ edges = edges + new_edges
89+
90+ new_nodes , new_edges = explore_pg_columns (cur , service_name )
91+ nodes = nodes + new_nodes
92+ edges = edges + new_edges
93+
8594 cur .close ()
8695 conn .close ()
8796 return (
@@ -176,7 +185,7 @@ def explore_pg_tables(cur, service_name):
176185 + service_name
177186 + "~schema~"
178187 + table [0 ]
179- + "~table ~"
188+ + "~table_view ~"
180189 + table [1 ],
181190 "service_type" : "pg" ,
182191 "type" : "table" ,
@@ -190,7 +199,7 @@ def explore_pg_tables(cur, service_name):
190199 + service_name
191200 + "~schema~"
192201 + table [0 ]
193- + "~table ~"
202+ + "~table_view ~"
194203 + table [1 ],
195204 "label" : "table" ,
196205 }
@@ -250,7 +259,7 @@ def explore_pg_grants(cur, service_name):
250259 + service_name
251260 + "~schema~"
252261 + role_table_grant [1 ]
253- + "~table ~"
262+ + "~table_view ~"
254263 + role_table_grant [2 ],
255264 "label" : "grant" ,
256265 "privilege_type" : role_table_grant [3 ],
@@ -282,7 +291,7 @@ def explore_pg_columns(cur, service_name):
282291 + service_name
283292 + "~schema~"
284293 + column [1 ]
285- + "~table ~"
294+ + "~table_view ~"
286295 + column [2 ]
287296 + "~column~"
288297 + column [3 ],
@@ -299,17 +308,82 @@ def explore_pg_columns(cur, service_name):
299308 + service_name
300309 + "~schema~"
301310 + column [1 ]
302- + "~table ~"
311+ + "~table_view ~"
303312 + column [2 ]
304313 + "~column~"
305314 + column [3 ],
306315 "to" : "pg~"
307316 + service_name
308317 + "~schema~"
309318 + column [1 ]
310- + "~table ~"
319+ + "~table_view ~"
311320 + column [2 ],
312321 "label" : "column" ,
313322 }
314323 )
315324 return nodes , edges
325+
326+
327+ def explore_pg_views (cur , service_name ):
328+
329+ nodes = []
330+ edges = []
331+
332+ cur .execute (
333+ """
334+ select table_catalog, table_schema, table_name, view_definition,
335+ check_option, is_updatable, is_insertable_into,
336+ is_trigger_updatable, is_trigger_deletable, is_trigger_insertable_into
337+ from information_schema.views
338+ where table_schema not in ('information_schema', 'pg_catalog');
339+ """
340+ )
341+
342+ views = cur .fetchall ()
343+ for view in views :
344+ nodes .append (
345+ {
346+ "id" : "pg~"
347+ + service_name
348+ + "~schema~"
349+ + view [1 ]
350+ + "~table_view~"
351+ + view [2 ],
352+ "service_type" : "pg" ,
353+ "type" : "view" ,
354+ "view_definition" : view [3 ],
355+ "check_option" : view [4 ],
356+ "is_updatable" : view [5 ],
357+ "is_insertable_into" : view [6 ],
358+ "is_trigger_updatable" : view [7 ],
359+ "is_trigger_deletable" : view [8 ],
360+ "is_trigger_insertable_into" : view [9 ],
361+ "label" : view [2 ],
362+ }
363+ )
364+ edges .append (
365+ {
366+ "from" : "pg~" + service_name + "~schema~" + view [1 ],
367+ "to" : "pg~"
368+ + service_name
369+ + "~schema~"
370+ + view [1 ]
371+ + "~table_view~"
372+ + view [2 ],
373+ "label" : "view" ,
374+ }
375+ )
376+
377+ new_nodes , new_edges = sql .explore_sql (
378+ view [3 ], service_name , view [1 ], view [2 ], "pg"
379+ )
380+ nodes = nodes + new_nodes
381+ edges = edges + new_edges
382+ return nodes , edges
383+
384+ # new_nodes, new_edges = sql.explore_sql(
385+ # "create view testview as select a, b from test",
386+ # "cavallo",
387+ # "serpente",
388+ # "kafka",
389+ # )
0 commit comments