itds 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +13 -0
- data/README.md +31 -11
- data/Rakefile +4 -0
- data/itds.gemspec +1 -0
- data/lib/itds/client.rb +8 -2
- data/lib/itds/repl.rb +58 -9
- data/lib/itds/version.rb +1 -1
- data/spec/itds/client_spec.rb +21 -0
- data/spec/spec_helper.rb +2 -0
- metadata +24 -3
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,24 @@
|
|
1
|
-
# Itds
|
1
|
+
# Itds [![CI] (https://travis-ci.org/andl/itds.svg?branch=master)] (https://travis-ci.org/andl/itds)
|
2
2
|
|
3
|
-
A
|
3
|
+
A deadly simple SQL server CLI tools just to ease the developer working on Mac or Linux.
|
4
|
+
|
5
|
+
# Dependency
|
6
|
+
|
7
|
+
Install freetds using the package manager of your system.
|
8
|
+
## Mac
|
9
|
+
```
|
10
|
+
$homebrew install freetds
|
11
|
+
```
|
12
|
+
|
13
|
+
## Ubuntu
|
14
|
+
```
|
15
|
+
$sudo apt-get install freetds-dev
|
16
|
+
```
|
17
|
+
|
18
|
+
# Install
|
19
|
+
```
|
20
|
+
$gem install itds
|
21
|
+
```
|
4
22
|
|
5
23
|
# Usage
|
6
24
|
|
@@ -11,7 +29,7 @@ $itds --help
|
|
11
29
|
|
12
30
|
Command parameters:
|
13
31
|
```
|
14
|
-
$itds -h <hostname> -
|
32
|
+
$itds -h <hostname> -p <password> -u <username> -d <contained_database> [SQL]
|
15
33
|
```
|
16
34
|
|
17
35
|
Execute a command
|
@@ -24,15 +42,17 @@ $itds -h <hostname> -d <database> select 1
|
|
24
42
|
+---+
|
25
43
|
```
|
26
44
|
|
27
|
-
|
45
|
+
Cancel a request in interactive mode.
|
28
46
|
```
|
29
47
|
$itds -h <hostname> -d <mydb>
|
30
|
-
mydb>
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
|
35
|
-
|
36
|
-
|
48
|
+
mydb> waitfor delay '00:00:04'
|
49
|
+
^C
|
50
|
+
mydb> select * from test
|
51
|
+
+----+
|
52
|
+
| id |
|
53
|
+
+----+
|
54
|
+
| 10 |
|
55
|
+
+----+
|
56
|
+
mydb> ^C
|
37
57
|
$
|
38
58
|
```
|
data/Rakefile
CHANGED
data/itds.gemspec
CHANGED
data/lib/itds/client.rb
CHANGED
@@ -8,15 +8,21 @@ module Itds
|
|
8
8
|
def_delegators :@backend, :close
|
9
9
|
|
10
10
|
DEFAULT_OPTS = {
|
11
|
-
port:
|
11
|
+
port: 1433,
|
12
12
|
username: 'sa',
|
13
|
+
timeout: 5,
|
13
14
|
}
|
14
15
|
|
15
16
|
def initialize(opts={})
|
16
17
|
opts = DEFAULT_OPTS.merge(opts)
|
17
18
|
opts[:azure] = true if(opts[:database])
|
19
|
+
opts[:login_timeout] = opts[:timeout]
|
18
20
|
|
19
|
-
@backend =
|
21
|
+
@backend = new_backend(opts)
|
22
|
+
end
|
23
|
+
|
24
|
+
def new_backend(opts)
|
25
|
+
TinyTds::Client.new(opts)
|
20
26
|
end
|
21
27
|
|
22
28
|
def execute(sql)
|
data/lib/itds/repl.rb
CHANGED
@@ -8,15 +8,24 @@ module Itds
|
|
8
8
|
def config(options)
|
9
9
|
@options = options
|
10
10
|
@client = Client.new(options)
|
11
|
-
self
|
12
11
|
end
|
13
12
|
|
14
13
|
def run
|
14
|
+
print_help
|
15
|
+
|
15
16
|
while cmd = Readline.readline(prompt, true)
|
16
17
|
execute_cmd(cmd)
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
21
|
+
def print_help
|
22
|
+
msg = <<-EOT
|
23
|
+
itds SQL server interactive console.
|
24
|
+
Press Ctrl-C to cancel current query, press again to quit.
|
25
|
+
EOT
|
26
|
+
puts msg
|
27
|
+
end
|
28
|
+
|
20
29
|
def prompt
|
21
30
|
@prompt ||= "#{@options[:database]}> "
|
22
31
|
end
|
@@ -24,10 +33,19 @@ module Itds
|
|
24
33
|
def execute_cmd(cmd)
|
25
34
|
begin
|
26
35
|
stop if cmd == "exit"
|
27
|
-
res = @client.execute(cmd)
|
28
|
-
print_result(res)
|
36
|
+
@res = @client.execute(cmd)
|
37
|
+
print_result(@res)
|
29
38
|
rescue => e
|
30
39
|
print_err(e)
|
40
|
+
ensure
|
41
|
+
cancel_request
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def cancel_request
|
46
|
+
if @res
|
47
|
+
@res.cancel
|
48
|
+
@res = nil
|
31
49
|
end
|
32
50
|
end
|
33
51
|
|
@@ -38,15 +56,42 @@ module Itds
|
|
38
56
|
rows << rowset.values
|
39
57
|
end
|
40
58
|
|
41
|
-
|
42
|
-
|
59
|
+
output = {}
|
60
|
+
output[:headings] = fields unless fields.empty?
|
61
|
+
output[:rows] = rows unless rows.empty?
|
62
|
+
|
63
|
+
unless output.empty?
|
64
|
+
puts Terminal::Table.new output
|
65
|
+
end
|
66
|
+
|
67
|
+
print_affected_row(res)
|
68
|
+
end
|
69
|
+
|
70
|
+
def print_affected_row(res)
|
71
|
+
# tiny_tds seems not only return affected_rows for update/delete
|
72
|
+
# but also select.
|
73
|
+
affected = res.affected_rows
|
74
|
+
|
75
|
+
if affected > 0
|
76
|
+
puts ""
|
77
|
+
puts "Affected Rows: #{affected}"
|
78
|
+
end
|
43
79
|
end
|
44
80
|
|
45
81
|
def print_err(err)
|
46
82
|
puts "Error: #{err.message}"
|
47
83
|
end
|
48
84
|
|
85
|
+
def singal
|
86
|
+
if @res
|
87
|
+
cancel_request
|
88
|
+
else
|
89
|
+
stop
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
49
93
|
def stop
|
94
|
+
@client.close
|
50
95
|
exit
|
51
96
|
end
|
52
97
|
end
|
@@ -65,7 +110,7 @@ module Itds
|
|
65
110
|
options[:host] = h
|
66
111
|
end
|
67
112
|
|
68
|
-
opts.on("-
|
113
|
+
opts.on("-P", "--port [PORT]", Integer, "port number, default is 1433") do |p|
|
69
114
|
options[:port] = p
|
70
115
|
end
|
71
116
|
|
@@ -77,10 +122,14 @@ module Itds
|
|
77
122
|
options[:database] = d
|
78
123
|
end
|
79
124
|
|
80
|
-
opts.on("-
|
125
|
+
opts.on("-p", "--password [PASSWORD]", "optional password") do |p|
|
81
126
|
options[:password] = p
|
82
127
|
end
|
83
128
|
|
129
|
+
opts.on("--timeout [TIMEOUT]", "connect and query timeout, 5 secs by default") do |t|
|
130
|
+
options[:timeout] = t
|
131
|
+
end
|
132
|
+
|
84
133
|
opts.on_tail("--help", "show this help message") do
|
85
134
|
puts opts
|
86
135
|
exit
|
@@ -105,8 +154,8 @@ module Itds
|
|
105
154
|
end
|
106
155
|
|
107
156
|
Repl.config(options)
|
108
|
-
if args.empty?
|
109
|
-
trap("INT") {
|
157
|
+
if args.empty? #interactive
|
158
|
+
trap("INT") { Repl.singal }
|
110
159
|
Repl.run
|
111
160
|
else
|
112
161
|
Repl.execute_cmd(args.join(" "))
|
data/lib/itds/version.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Itds
|
4
|
+
describe Client do
|
5
|
+
|
6
|
+
it "able to set login timeout" do
|
7
|
+
timeout = 2
|
8
|
+
t = Thread.new do
|
9
|
+
Client.new(
|
10
|
+
{
|
11
|
+
host: localhost,
|
12
|
+
timeout: timeout,
|
13
|
+
}
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
sleep(timeout + 1)
|
18
|
+
t.alive?.should be_false
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itds
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-05-
|
12
|
+
date: 2014-05-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: tiny_tds
|
@@ -75,6 +75,22 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rspec
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
78
94
|
description:
|
79
95
|
email:
|
80
96
|
- liusandrew@gmail.com
|
@@ -84,6 +100,7 @@ extensions: []
|
|
84
100
|
extra_rdoc_files: []
|
85
101
|
files:
|
86
102
|
- .gitignore
|
103
|
+
- .travis.yml
|
87
104
|
- Gemfile
|
88
105
|
- LICENSE.txt
|
89
106
|
- README.md
|
@@ -94,6 +111,8 @@ files:
|
|
94
111
|
- lib/itds/client.rb
|
95
112
|
- lib/itds/repl.rb
|
96
113
|
- lib/itds/version.rb
|
114
|
+
- spec/itds/client_spec.rb
|
115
|
+
- spec/spec_helper.rb
|
97
116
|
homepage: http://github.com/andl/itds
|
98
117
|
licenses:
|
99
118
|
- MIT
|
@@ -119,5 +138,7 @@ rubygems_version: 1.8.23
|
|
119
138
|
signing_key:
|
120
139
|
specification_version: 3
|
121
140
|
summary: A very simple SQL server client.
|
122
|
-
test_files:
|
141
|
+
test_files:
|
142
|
+
- spec/itds/client_spec.rb
|
143
|
+
- spec/spec_helper.rb
|
123
144
|
has_rdoc:
|