Skip to content

Commit ecc474d

Browse files
authored
Merge pull request #1395 from lanzagar/create_ext
[ENH] Automatically create required SQL extensions
2 parents 9e4e5dd + 6c93cd4 commit ecc474d

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

Orange/widgets/data/owsql.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616

1717
MAX_DL_LIMIT = 1000000
18+
EXTENSIONS = ('tsm_system_time', 'quantile')
1819

1920

2021
class OWSql(widget.OWWidget):
@@ -132,20 +133,20 @@ def __init__(self):
132133

133134
def error(self, id=0, text=""):
134135
super().error(id, text)
136+
err_style = 'QLineEdit {border: 2px solid red;}'
135137
if 'server' in text or 'host' in text:
136-
self.servertext.setStyleSheet('QLineEdit {border: 2px solid red;}')
138+
self.servertext.setStyleSheet(err_style)
137139
else:
138140
self.servertext.setStyleSheet('')
139141
if 'role' in text:
140-
self.usernametext.setStyleSheet('QLineEdit {border: 2px solid red;}')
142+
self.usernametext.setStyleSheet(err_style)
141143
else:
142144
self.usernametext.setStyleSheet('')
143145
if 'database' in text:
144-
self.databasetext.setStyleSheet('QLineEdit {border: 2px solid red;}')
146+
self.databasetext.setStyleSheet(err_style)
145147
else:
146148
self.databasetext.setStyleSheet('')
147149

148-
149150
def connect(self):
150151
hostport = self.servertext.text().split(':')
151152
self.host = hostport[0]
@@ -173,9 +174,9 @@ def connect(self):
173174
self.database_desc = self.data_desc_table = None
174175
self.tablecombo.clear()
175176

176-
177177
def refresh_tables(self):
178178
self.tablecombo.clear()
179+
self.error(1)
179180
if self._connection is None:
180181
self.data_desc_table = None
181182
return
@@ -215,7 +216,25 @@ def select_table(self):
215216
self.database_desc["Table"] = "(None)"
216217
self.table = None
217218

219+
def create_extensions(self):
220+
missing = []
221+
for ext in EXTENSIONS:
222+
try:
223+
cur = self._connection.cursor()
224+
cur.execute("CREATE EXTENSION IF NOT EXISTS " + ext)
225+
except psycopg2.OperationalError:
226+
missing.append(ext)
227+
finally:
228+
self._connection.commit()
229+
if missing:
230+
self.error(1, 'Database missing extension{}: {}'.format(
231+
's' if len(missing) > 1 else '',
232+
', '.join(missing)))
233+
else:
234+
self.error(1)
235+
218236
def open_table(self):
237+
self.create_extensions()
219238
table = self.get_table()
220239
self.data_desc_table = table
221240
self.send("Data", table)

0 commit comments

Comments
 (0)