Skip to content

Commit 51a99e5

Browse files
committed
v1.6.3 connection rework
1 parent bb66486 commit 51a99e5

37 files changed

+4279
-99
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,8 @@ Activity monitor
5858
Long running queries
5959

6060
![SQL request](https://raw.githubusercontent.com/wiki/tosher/TSQLEasy/images/tsql_easy_scr3.png)
61+
62+
## External dependencies
63+
64+
* [Terminaltables](https://robpol86.github.io/terminaltables/index.html)
65+
* [Sqlparse](https://github.com/andialbrecht/sqlparse)

TSQLEasy.sublime-settings

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"te_result_in_tab": false,
2828
"te_result_in_new_tab": false,
2929
"te_show_request_in_result": false,
30-
"te_syntax": "Packages/TSQLEasy/TSQL.tmLanguage",
30+
"te_syntax": "Packages/TSQLEasy/TSQL.sublime-syntax",
3131
"te_report_syntax": "Packages/Markdown/Markdown.tmLanguage",
3232
"te_activity_monitor_min_pid": 50, // show/hide system processes
3333

base/sqlodbccon.py

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import os.path
66
import sublime
77

8+
89
odbc_lib_path = os.path.normpath(
910
os.path.join(
1011
os.path.dirname(__file__),
@@ -26,7 +27,7 @@
2627
print('TSQLEasy: PyODBC is not available: %s' % e)
2728

2829

29-
class SQLCon:
30+
class SQLCon(object):
3031

3132
defaultschema = None
3233

@@ -47,7 +48,7 @@ def __init__(self, dsn=None, server='127.0.0.1', driver='SQL Server', serverport
4748
self.sqlconnection = None
4849
self.sqlcursor = None
4950
self.dbconnect()
50-
self.defaultschema = self._get_default_schema()
51+
# self.defaultschema = self._get_default_schema()
5152

5253
def _get_connection_string(self):
5354
if not self.dsn:
@@ -70,11 +71,11 @@ def _get_connection_string(self):
7071

7172
return connection_string
7273

73-
def _get_default_schema(self):
74-
if self.sqlconnection is not None:
75-
self.dbexec('SELECT SCHEMA_NAME()')
76-
if self.sqldataset:
77-
return self.sqldataset[0][0]
74+
# def _get_default_schema(self):
75+
# if self.sqlconnection is not None:
76+
# self.dbexec('SELECT SCHEMA_NAME()')
77+
# if self.sqldataset:
78+
# return self.sqldataset[0][0]
7879

7980
def dbconnect(self):
8081
self.sqlconnection = None
@@ -84,10 +85,14 @@ def dbconnect(self):
8485
# self.sqlconnection.setencoding('utf-8')
8586
if self.autocommit:
8687
self.sqlconnection.autocommit = True
88+
self.post_connection_setup()
8789
self.sqlcursor = self.sqlconnection.cursor()
8890
except Exception:
8991
raise
9092

93+
def post_connection_setup(self):
94+
pass
95+
9196
def dbdisconnect(self):
9297
if self.sqlconnection:
9398
self.sqlconnection.close()
@@ -121,3 +126,51 @@ def dbexec(self, sql_string, sql_params=None):
121126
raise(e)
122127
except Exception as e:
123128
raise(e)
129+
130+
131+
class ConSQLServer(SQLCon):
132+
defaultschema = None
133+
134+
def __init__(self, dsn=None, driver='SQL Server', server='127.0.0.1', serverport=1433,
135+
username="", password="", database="",
136+
sleepsecs=5, autocommit=True, timeout=0):
137+
138+
# super(ConSQLServer, self).__init__(
139+
super().__init__(
140+
dsn=dsn, driver=driver, server=server, serverport=serverport,
141+
username=username, password=password, database=database,
142+
sleepsecs=sleepsecs, autocommit=autocommit, timeout=timeout)
143+
144+
self.defaultschema = self._get_default_schema()
145+
146+
def _get_default_schema(self):
147+
if self.sqlconnection is not None:
148+
self.dbexec('SELECT SCHEMA_NAME()')
149+
if self.sqldataset:
150+
return self.sqldataset[0][0]
151+
152+
153+
class ConPostgreSQLServer(SQLCon):
154+
defaultschema = None
155+
156+
def __init__(self, dsn=None, driver='"PostgreSQL Unicode(x64)"', server='127.0.0.1', serverport=5432,
157+
username="", password="", database="",
158+
sleepsecs=5, autocommit=True, timeout=0):
159+
160+
# super(ConSQLServer, self).__init__(
161+
super().__init__(
162+
dsn=dsn, driver=driver, server=server, serverport=serverport,
163+
username=username, password=password, database=database,
164+
sleepsecs=sleepsecs, autocommit=autocommit, timeout=timeout)
165+
166+
self.defaultschema = self._get_default_schema()
167+
168+
def _get_default_schema(self):
169+
if self.sqlconnection is not None:
170+
self.dbexec('SELECT current_schema();')
171+
if self.sqldataset:
172+
return self.sqldataset[0][0]
173+
174+
def post_connection_setup(self):
175+
self.sqlconnection.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
176+
self.sqlconnection.setencoding(encoding='utf-8')

base/te_activity_monitor.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ def show(self, view):
6262
view.set_scratch(True)
6363
view.set_read_only(True)
6464

65+
def is_visible(self, *args):
66+
if utils.ConDispatcher.is_sqlserver():
67+
return True
68+
return False
69+
6570

6671
class TsqlEasyActivityMonitorRefreshCommand(TsqlEasyActivityMonitorCommand):
6772

base/te_long_queries.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ def show(self, view):
5858
view.set_scratch(True)
5959
view.set_read_only(True)
6060

61+
def is_visible(self, *args):
62+
if utils.ConDispatcher.is_sqlserver():
63+
return True
64+
return False
65+
6166

6267
class TsqlEasyLongQueriesRefreshCommand(TsqlEasyLongQueriesCommand):
6368

base/te_open_server_obj.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ def run(self, edit):
2727
if chars_before:
2828
word_cursor = ''.join([chars_before, word_cursor])
2929

30-
sqlreq = "exec sp_helptext @objname = ?"
31-
sqlcon = utils.te_get_connection()
30+
sqlreq = "exec sp_helptext @objname = ?" # TODO: sqlsrv, postgres..
31+
# sqlcon = utils.te_get_connection()
32+
sqlcon = utils.te_sql_info().get_connection()
3233
if sqlcon.sqlconnection is not None:
3334
sqlcon.dbexec(sqlreq, [word_cursor])
3435
text = ''
@@ -52,3 +53,8 @@ def run(self, edit):
5253
new_view.set_line_endings('unix')
5354
else:
5455
self.view.window().status_message('No connection to SQL server')
56+
57+
def is_visible(self, *args):
58+
if utils.ConDispatcher.is_sqlserver():
59+
return True
60+
return False

base/te_show_query.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ def get_query(self, row_id):
5858
self.view.window().status_message('Error: Unknown mode')
5959

6060
if row_id:
61-
sqlcon = utils.te_get_connection()
61+
# sqlcon = utils.te_get_connection()
62+
sqlcon = utils.te_sql_info().get_connection()
6263
if sqlcon.sqlconnection is not None and sql_query:
6364
sqlcon.dbexec(sql_query, (row_id,))
6465
rows = sqlcon.sqldataset

base/te_sql_alias.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# -*- coding: utf-8 -*-
33

44
import hashlib
5+
from . import tsql_keywords
56

67

78
class SQLAlias():
@@ -11,16 +12,24 @@ class SQLAlias():
1112
def __init__(self):
1213
pass
1314

15+
def is_valid_alias(self, val):
16+
if val.startswith('@'):
17+
return False
18+
if val.upper() in tsql_keywords.all_keywords:
19+
return False
20+
# print('"{}" is valid alias name'.format(val))
21+
return True
22+
1423
def set_alias(self, alias, name):
15-
if self.aliases.get(alias, '') != name:
24+
if self.is_valid_alias(alias) and self.is_valid_alias(name) and alias not in self.aliases:
1625
self.aliases[alias] = name
1726

1827
def get_alias(self, alias):
1928
return self.aliases.get(alias, '')
2029

2130
def alias_list(self):
2231
for alias in self.aliases:
23-
print('[%s] => <%s>' % (self.aliases[alias], alias))
32+
print('[{table}] => <{alias}>'.format(table=self.aliases[alias], alias=alias))
2433

2534
def set_text_hash(self, text):
2635
text_hash = hashlib.md5(text).hexdigest()

base/te_sql_exec.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ class TsqlEasyExecSqlCommand(sublime_plugin.TextCommand):
1717
res_view = None
1818

1919
def run(self, view, query=None):
20-
self.sqlcon = utils.te_get_connection()
20+
# self.sqlcon = utils.te_get_connection()
21+
self.sqlcon = utils.te_sql_info().get_connection()
2122
self.view.set_line_endings('windows')
2223
if query:
2324
self.sql_query = query

base/te_table_info.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,8 @@ def run(self, edit):
181181
if not self.res_view:
182182
self.res_view = sublime.active_window().create_output_panel(panel_name)
183183

184-
self.sqlcon = utils.te_get_connection()
184+
# self.sqlcon = utils.te_get_connection()
185+
self.sqlcon = utils.te_sql_info().get_connection()
185186
try:
186187
self.sqlcon.dbexec(self.DDL_CMD.format(table=table))
187188
except Exception as e:
@@ -216,3 +217,8 @@ def getval(self, value):
216217
return '{null}'
217218
else:
218219
return str(value)
220+
221+
def is_visible(self, *args):
222+
if utils.ConDispatcher.is_sqlserver():
223+
return True
224+
return False

0 commit comments

Comments
 (0)