Skip to content

Commit 48a2899

Browse files
Abhi/fixes (#125)
* Return empty rows instead of none, use uuid for request id * Fix typo in exception * Fix test_rowlimit.py and make show limit prompt handle None return type * Use uuid int format
1 parent 27bb8c4 commit 48a2899

File tree

6 files changed

+19
-26
lines changed

6 files changed

+19
-26
lines changed

mssqlcli/jsonrpc/contracts/connectionservice.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,9 @@ def __init__(self, params):
119119
self.error_message = inner_params[u'errorMessage']
120120
self.error_number = inner_params[u'errorNumber']
121121
# server information.
122-
self.is_cloud = inner_params['serverInfo']['isCloud'] if inner_params['serverInfo'] else False
123-
self.server_version = inner_params['serverInfo']['serverVersion'] if inner_params['serverInfo'] else None
124-
self.server_edition = inner_params['serverInfo']['serverEdition'] if inner_params['serverInfo'] else None
122+
self.is_cloud = inner_params[u'serverInfo'][u'isCloud'] if u'serverInfo' in inner_params else False
123+
self.server_version = inner_params[u'serverInfo'][u'serverVersion'] if u'serverInfo' in inner_params else None
124+
self.server_edition = inner_params[u'serverInfo'][u'serverEdition'] if u'serverInfo' in inner_params else None
125125

126126

127127
class ConnectionResponse(object):

mssqlcli/jsonrpc/contracts/queryexecutestringservice.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ def get_response(self):
164164

165165
except Exception as error:
166166
self.finished = True
167-
self.json_rpc_client.request_finised(self.id)
167+
self.json_rpc_client.request_finished(self.id)
168168
return ResultSubset(None, error_message=str(error))
169169

170170
def execute(self):

mssqlcli/main.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,8 @@ def get_continuation_tokens(cli, width):
487487

488488
def _should_show_limit_prompt(self, status, rows):
489489
"""returns True if limit prompt should be shown, False otherwise."""
490+
if not rows:
491+
return False
490492
return self.row_limit > 0 and len(rows) > self.row_limit
491493

492494
def _evaluate_command(self, text):

mssqlcli/mssqlcliclient.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ def tabular_results_generator(
178178
# Returns a generator of rows, columns, status(rows affected) or
179179
# message, sql (the query), is_error
180180
if is_error:
181-
return None, None, message, query, is_error
181+
return (), None, message, query, is_error
182182

183183
columns = [
184184
col.column_name for col in column_info] if column_info else None

mssqlcli/sqltoolsclient.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io
99
import time
1010
import sys
11+
import uuid
1112

1213
import mssqlcli.mssqltoolsservice as mssqltoolsservice
1314
import mssqlcli.jsonrpc.jsonrpcclient as json_rpc_client
@@ -29,7 +30,7 @@ def __init__(self, input_stream=None, output_stream=None):
2930
Input and output streams for JsonRpcClient are taken as optional params,
3031
Else a SqlToolsService process is started and its stdin and stdout is used.
3132
"""
32-
self.current_id = 1
33+
self.current_id = uuid.uuid4().int
3334
self.tools_service_process = None
3435

3536
if input_stream and output_stream:
@@ -60,23 +61,21 @@ def create_request(self, request_type, parameters):
6061
Create request of request type passed in.
6162
"""
6263
request = None
64+
self.current_id = uuid.uuid4().int
6365

6466
if request_type == u'connection_request':
6567
logger.info(u'SqlToolsClient connection request Id {0}'.format(self.current_id))
6668
request = connection.ConnectionRequest(self.current_id, self.json_rpc_client, parameters)
67-
self.current_id += 1
6869
return request
6970

7071
if request_type == u'query_execute_string_request':
7172
logger.info(u'SqlToolsClient execute string request Id {0}'.format(self.current_id))
7273
request = query.QueryExecuteStringRequest(self.current_id, self.json_rpc_client, parameters)
73-
self.current_id += 1
7474
return request
7575

7676
if request_type == u'query_subset_request':
7777
logger.info(u'SqlToolsClient subset request Id {0}'.format(self.current_id))
7878
request = query.QuerySubsetRequest(self.current_id, self.json_rpc_client, parameters)
79-
self.current_id += 1
8079
return request
8180

8281
def shutdown(self):

tests/test_rowlimit.py

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,37 @@
11
from mssqlcli.main import MssqlCli
2-
from mock import Mock
32

43
DEFAULT = MssqlCli().row_limit
54
LIMIT = DEFAULT + 1000
65

7-
8-
over_default = Mock()
9-
over_default.configure_mock(rowcount=DEFAULT + 10)
10-
11-
over_limit = Mock()
12-
over_limit.configure_mock(rowcount=LIMIT + 10)
13-
14-
low_count = Mock()
15-
low_count.configure_mock(rowcount=1)
16-
6+
low_count = 1
7+
over_default = DEFAULT + 1
8+
over_limit = LIMIT + 1
179

1810
def test_default_row_limit():
1911
cli = MssqlCli()
2012
stmt = "SELECT * FROM students"
21-
result = cli._should_show_limit_prompt(stmt, low_count)
13+
result = cli._should_show_limit_prompt(stmt, ['row']*low_count)
2214
assert result is False
2315

24-
result = cli._should_show_limit_prompt(stmt, over_default)
16+
result = cli._should_show_limit_prompt(stmt, ['row']*over_default)
2517
assert result is True
2618

2719

2820
def test_set_row_limit():
2921
cli = MssqlCli(row_limit=LIMIT)
3022
stmt = "SELECT * FROM students"
31-
result = cli._should_show_limit_prompt(stmt, over_default)
23+
result = cli._should_show_limit_prompt(stmt, ['row']*over_default)
3224
assert result is False
3325

34-
result = cli._should_show_limit_prompt(stmt, over_limit)
26+
result = cli._should_show_limit_prompt(stmt, ['row']*over_limit)
3527
assert result is True
3628

3729

3830
def test_no_limit():
3931
cli = MssqlCli(row_limit=0)
4032
stmt = "SELECT * FROM students"
4133

42-
result = cli._should_show_limit_prompt(stmt, over_limit)
34+
result = cli._should_show_limit_prompt(stmt, ['row']*over_limit)
4335
assert result is False
4436

4537

@@ -50,5 +42,5 @@ def test_row_limit_on_non_select():
5042
assert result is False
5143

5244
cli = MssqlCli(row_limit=0)
53-
result = cli._should_show_limit_prompt(stmt, over_default)
45+
result = cli._should_show_limit_prompt(stmt, ['row']*over_default)
5446
assert result is False

0 commit comments

Comments
 (0)