Skip to content

Commit 4e5ca05

Browse files
author
Aditya Bist
authored
refactored scripting service (microsoft#80)
* refactored scripting service * log scripting errors * fixed tests * more refactoring!
1 parent e6719e6 commit 4e5ca05

File tree

3 files changed

+100
-286
lines changed

3 files changed

+100
-286
lines changed

pgsqltoolsservice/scripting/scripter.py

Lines changed: 54 additions & 207 deletions
Original file line numberDiff line numberDiff line change
@@ -29,262 +29,109 @@ def script_as_select(self, metadata) -> str:
2929

3030
# CREATE ##################################################################
3131

32-
# Database
33-
34-
def get_database_create_script(self, metadata) -> str:
35-
""" Get create script for databases """
32+
def get_create_script(self, metadata) -> str:
33+
""" Get create script for all objects """
3634
try:
37-
# get database from server
38-
database_name = metadata["name"]
39-
database = self.server.databases[database_name]
35+
# get object from server
36+
object_type = metadata["metadataTypeName"]
37+
obj = self._get_object(object_type, metadata)
4038

4139
# get the create script
42-
script = database.create_script(self.connection)
43-
return script
44-
except Exception:
45-
# need to handle exceptions well
46-
return None
40+
script = obj.create_script(self.connection)
4741

48-
# View
49-
50-
def get_view_create_script(self, metadata) -> str:
51-
""" Get create script for views """
52-
try:
53-
# get view from server
54-
view_name = metadata["name"]
55-
parent_schema = self._find_schema(metadata)
56-
view = parent_schema.views[view_name]
57-
58-
# get the create script
59-
script = view.create_script(self.connection)
6042
return script
6143
except Exception:
44+
# need to handle exceptions well
6245
return None
6346

64-
# Table
65-
66-
def get_table_create_script(self, metadata) -> str:
67-
""" Get create script for tables """
47+
# DELETE ##################################################################
48+
def get_delete_script(self, metadata) -> str:
49+
""" Get delete script for all objects """
6850
try:
69-
# get table from server
70-
table = self._find_table(metadata)
51+
# get object from server
52+
object_type = metadata["metadataTypeName"]
53+
obj = self._get_object(object_type, metadata)
7154

7255
# get the create script
73-
script = table.create_script(self.connection)
56+
script = obj.delete_script(self.connection)
7457
return script
7558
except Exception:
7659
return None
7760

78-
# Tablespace
79-
80-
def get_tablespace_create_script(self, metadata) -> str:
81-
try:
82-
# get tablespace
83-
tablespace_name = metadata["name"]
84-
tablespace = self.server.tablespaces[tablespace_name]
85-
86-
# get create script
87-
script = tablespace.create_script(self.connection)
88-
return script
89-
except Exception:
90-
return None
91-
92-
# Schema
61+
# UPDATE ##################################################################
9362

94-
def get_schema_create_script(self, metadata) -> str:
95-
""" Get create script for schema """
63+
def get_table_update_script(self, metadata) -> str:
64+
""" Get update script for tables """
9665
try:
97-
# get schema from server
98-
schema = self._find_schema(metadata)
66+
# get object from server
67+
object_type = metadata["metadataTypeName"]
68+
obj = self._get_object(object_type, metadata)
9969

10070
# get the create script
101-
script = schema.create_script(self.connection)
71+
script = obj.update_script(self.connection)
10272
return script
10373
except Exception:
10474
return None
10575

106-
def get_role_create_script(self, metadata) -> str:
107-
""" Get create script for role """
108-
try:
109-
# get roles from server
110-
role_name = metadata["name"]
111-
role = self.server.roles[role_name]
112-
113-
# get the create script
114-
script = role.create_script(self.connection)
115-
return script
116-
except:
117-
return None
118-
119-
# DELETE ##################################################################
120-
121-
# Table
76+
# HELPER METHODS ##########################################################
12277

123-
def get_table_delete_script(self, metadata) -> str:
124-
""" Get delete script for table """
78+
def _find_schema(self, metadata):
79+
""" Find the schema in the server to script as """
80+
table_schema = metadata["schema"]
81+
databases = self.server.databases
82+
parent_schema = None
12583
try:
126-
table = self._find_table(metadata)
127-
script = table.delete_script(self.connection)
128-
return script
84+
for db in databases:
85+
parent_schema = db.schemas[table_schema]
86+
return parent_schema
12987
except Exception:
13088
return None
13189

132-
# View
133-
134-
def get_view_delete_script(self, metadata) -> str:
135-
""" Get delete script for view """
90+
def _find_table(self, metadata):
91+
""" Find the table in the server to script as """
13692
try:
137-
# get view from server
138-
view_name = metadata["name"]
93+
table_name = metadata["name"]
13994
parent_schema = self._find_schema(metadata)
140-
view = parent_schema.views[view_name]
141-
142-
# get the delete script
143-
script = view.delete_script(self.connection)
144-
return script
95+
for table in parent_schema.tables:
96+
return parent_schema.tables[table_name]
14597
except Exception:
14698
return None
14799

148-
# Database
149-
150-
def get_database_delete_script(self, metadata) -> str:
151-
""" Get delete script for databases """
100+
def _find_database(self, metadata):
101+
""" Find a database in the server """
152102
try:
153-
# get database from server
154103
database_name = metadata["name"]
155104
database = self.server.databases[database_name]
156-
157-
# get the delete script
158-
script = database.delete_script(self.connection)
159-
return script
105+
return database
160106
except Exception:
161107
return None
162108

163-
# Schema
164-
165-
def get_schema_delete_script(self, metadata) -> str:
166-
""" Get delete script for schemas """
109+
def _find_view(self, metadata):
110+
""" Find a view in the server """
167111
try:
168-
# get schema from server
169-
schema = self._find_schema(metadata)
170-
171-
# get the delete script
172-
script = schema.delete_script(self.connection)
173-
return script
174-
except Exception:
175-
return None
176-
177-
# Tablespace
178-
179-
def get_tablespace_delete_script(self, metadata) -> str:
180-
""" Get delete script for tablespaces """
181-
try:
182-
# get tablespace from server
183-
tablespace_name = metadata["name"]
184-
tablespace = self.server.tablespaces[tablespace_name]
185-
186-
# get the delete script
187-
script = tablespace.delete_script(self.connection)
188-
return script
189-
except Exception:
190-
return None
191-
192-
# UPDATE ##################################################################
193-
194-
# Table
195-
196-
def get_table_update_script(self, metadata) -> str:
197-
""" Get update script for tables """
198-
try:
199-
# get table from server
200-
table = self._find_table(metadata)
201-
202-
# get the create script
203-
script = table.update_script(self.connection)
204-
return script
205-
except Exception:
206-
return None
207-
208-
# View
209-
210-
def get_view_update_script(self, metadata) -> str:
211-
""" Get update date script for view """
212-
try:
213-
# get view from server
214112
view_name = metadata["name"]
215113
parent_schema = self._find_schema(metadata)
216114
view = parent_schema.views[view_name]
217-
218-
# get the create script
219-
script = view.update_script(self.connection)
220-
return script
221-
except Exception:
222-
return None
223-
224-
# Schema
225-
226-
def get_schema_update_script(self, metadata) -> str:
227-
""" Get update script for schemas """
228-
try:
229-
# get schema from server
230-
schema = self._find_schema(metadata)
231-
232-
# get the delete script
233-
script = schema.update_script(self.connection)
234-
return script
115+
return view
235116
except Exception:
236117
return None
237118

238-
# Role
239-
240-
def get_role_update_script(self, metadata) -> str:
241-
""" Get update script for roles """
119+
def _find_role(self, metadata):
120+
""" Find a role in the server """
242121
try:
243-
# get roles from server
244122
role_name = metadata["name"]
245123
role = self.server.roles[role_name]
246-
247-
# get the create script
248-
script = role.update_script(self.connection)
249-
return script
250-
except Exception:
251-
return None
252-
253-
# Tablespace
254-
255-
def get_tablespace_update_script(self, metadata) -> str:
256-
""" Get update script for tablespaces """
257-
try:
258-
# get tablespace from server
259-
tablespace_name = metadata["name"]
260-
tablespace = self.server.tablespaces[tablespace_name]
261-
262-
# get the delete script
263-
script = tablespace.update_script(self.connection)
264-
return script
265-
except Exception:
266-
return None
267-
268-
# HELPER METHODS ##########################################################
269-
270-
def _find_schema(self, metadata):
271-
""" Find the schema in the server to script as """
272-
table_schema = metadata["schema"]
273-
databases = self.server.databases
274-
parent_schema = None
275-
try:
276-
for db in databases:
277-
parent_schema = db.schemas[table_schema]
278-
return parent_schema
124+
return role
279125
except Exception:
280126
return None
281127

282-
def _find_table(self, metadata):
283-
""" Find the table in the server to script as """
284-
try:
285-
table_name = metadata["name"]
286-
parent_schema = self._find_schema(metadata)
287-
for table in parent_schema.tables:
288-
return parent_schema.tables[table_name]
289-
except Exception:
290-
return None
128+
def _get_object(self, object_type: str, metadata):
129+
""" Retrieve a given object """
130+
object_map = {
131+
"Table": self._find_table,
132+
"Schema": self._find_schema,
133+
"Database": self._find_database,
134+
"View": self._find_view,
135+
"Role": self._find_role
136+
}
137+
return object_map[object_type](metadata)

0 commit comments

Comments
 (0)