rsql 0.2.2 → 0.2.3
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/bin/rsql +19 -2
- data/lib/rsql.rb +1 -1
- data/lib/rsql/commands.rb +2 -2
- data/lib/rsql/eval_context.rb +7 -7
- data/lib/rsql/mysql_results.rb +1 -1
- data/test/test_commands.rb +2 -2
- data/test/test_eval_context.rb +2 -1
- metadata +4 -4
data/bin/rsql
CHANGED
@@ -428,6 +428,18 @@ Signal.trap('INT') do
|
|
428
428
|
cmd_thread.kill
|
429
429
|
end
|
430
430
|
|
431
|
+
Signal.trap('CHLD') do
|
432
|
+
$stderr.puts "SSH child (#{ssh_pid}) stopped--shutting down..."
|
433
|
+
if cmd_thread[:running] && MySQLResults.conn
|
434
|
+
$stderr.puts 'Interrupting MySQL query...'
|
435
|
+
safe_timeout(MySQLResults.conn, :close, 'MySQL')
|
436
|
+
MySQLResults.conn = nil
|
437
|
+
end
|
438
|
+
cmd_thread[:shutdown] = true
|
439
|
+
sleep(0.3)
|
440
|
+
cmd_thread.kill
|
441
|
+
end
|
442
|
+
|
431
443
|
begin
|
432
444
|
cmd_thread.join
|
433
445
|
rescue Exception => ex
|
@@ -451,6 +463,11 @@ if Readline::HISTORY.any?
|
|
451
463
|
end
|
452
464
|
|
453
465
|
if ssh_pid && 0 <= ssh_pid
|
454
|
-
|
455
|
-
|
466
|
+
begin
|
467
|
+
Process.kill('INT', ssh_pid)
|
468
|
+
Process.waitpid(ssh_pid)
|
469
|
+
rescue Exception => ex
|
470
|
+
$stderr.puts ex.message
|
471
|
+
$stderr.puts ex.backtrace if verbose
|
472
|
+
end
|
456
473
|
end
|
data/lib/rsql.rb
CHANGED
data/lib/rsql/commands.rb
CHANGED
@@ -64,7 +64,7 @@ module RSQL
|
|
64
64
|
sep = nil
|
65
65
|
end
|
66
66
|
|
67
|
-
|
67
|
+
unless esc.empty?
|
68
68
|
esc << match
|
69
69
|
match = esc
|
70
70
|
esc = ''
|
@@ -177,7 +177,7 @@ module RSQL
|
|
177
177
|
displayer = @default_displayer
|
178
178
|
end
|
179
179
|
|
180
|
-
|
180
|
+
unless content.empty?
|
181
181
|
@cmds << Command.new(content, bangs, declarator, displayer)
|
182
182
|
return true
|
183
183
|
end
|
data/lib/rsql/eval_context.rb
CHANGED
@@ -100,7 +100,6 @@ module RSQL
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def reload
|
103
|
-
MySQLResults.reset_cache
|
104
103
|
@loaded_fns.each{|fn| self.load(fn, false)}
|
105
104
|
puts "loaded: #{@loaded_fns.inspect}"
|
106
105
|
end
|
@@ -108,7 +107,7 @@ module RSQL
|
|
108
107
|
def bang_eval(field, val)
|
109
108
|
if bang = @bangs[field]
|
110
109
|
begin
|
111
|
-
val = Thread.new{ eval("
|
110
|
+
val = Thread.new{ eval("#{bang}(val)") }.value
|
112
111
|
rescue Exception => ex
|
113
112
|
$stderr.puts(ex.message, ex.backtrace.first)
|
114
113
|
end
|
@@ -153,7 +152,7 @@ module RSQL
|
|
153
152
|
# that we have file/line info, we need to rescue their
|
154
153
|
# exceptions inside the evaluation
|
155
154
|
th = Thread.new do
|
156
|
-
eval('
|
155
|
+
eval('begin;' << content << %q{
|
157
156
|
rescue Exception => ex
|
158
157
|
if @verbose
|
159
158
|
$stderr.puts("#{ex.class}: #{ex.message}", ex.backtrace)
|
@@ -223,7 +222,7 @@ module RSQL
|
|
223
222
|
end
|
224
223
|
limit -= 1
|
225
224
|
end
|
226
|
-
'%02x' % ch
|
225
|
+
'%02x' % ch.bytes.first
|
227
226
|
end
|
228
227
|
|
229
228
|
if limit && limit < 1 && 0 < cnt
|
@@ -358,13 +357,14 @@ module RSQL
|
|
358
357
|
next unless ending || i == lineno
|
359
358
|
source << line
|
360
359
|
unless ending
|
361
|
-
unless m = line.match(/\{|do/)
|
360
|
+
unless m = line.match(/\{|do\b/)
|
362
361
|
$stderr.puts "unable to locate block beginning at #{fn}:#{lineno}"
|
363
362
|
return
|
364
363
|
end
|
365
364
|
ending = m[0] == '{' ? '\}' : 'end'
|
366
365
|
next
|
367
366
|
end
|
367
|
+
|
368
368
|
if m = line.match(/^#{ending}/)
|
369
369
|
found = true
|
370
370
|
break
|
@@ -379,7 +379,7 @@ module RSQL
|
|
379
379
|
end
|
380
380
|
end
|
381
381
|
|
382
|
-
if reg.source && reg.source.
|
382
|
+
if reg.source && !reg.source.empty?
|
383
383
|
puts reg.source
|
384
384
|
else
|
385
385
|
$stderr.puts "unable to locate body for #{sym}"
|
@@ -440,7 +440,7 @@ module RSQL
|
|
440
440
|
argstr = args.join(',')
|
441
441
|
usage << "(#{argstr})" unless argstr.empty?
|
442
442
|
|
443
|
-
blockstr = %{
|
443
|
+
blockstr = %{lambda{|#{argstr}|%{#{sql}} % [#{argstr}]}}
|
444
444
|
block = Thread.new{ eval(blockstr) }.value
|
445
445
|
args = []
|
446
446
|
else
|
data/lib/rsql/mysql_results.rb
CHANGED
@@ -260,7 +260,7 @@ module RSQL
|
|
260
260
|
# we set this here so that (a) it occurs _after_ we are
|
261
261
|
# successful and so we can show an appropriate messge in a
|
262
262
|
# displayer
|
263
|
-
if @sql.match(/use\s+(\S+)/)
|
263
|
+
if @sql.match(/use\s+(\S+)/i)
|
264
264
|
@database_changed = true
|
265
265
|
@@database_name = $1
|
266
266
|
end
|
data/test/test_commands.rb
CHANGED
@@ -53,7 +53,7 @@ class TestCommands < Test::Unit::TestCase
|
|
53
53
|
|
54
54
|
# make sure our logic to handle eval'd blocks with args works
|
55
55
|
@strout.string = ''
|
56
|
-
cmds = Commands.new('. Proc.new{|a|
|
56
|
+
cmds = Commands.new('. Proc.new{|a| puts a.inspect} | @results.value.call(:fancy)', :display_by_column)
|
57
57
|
cmds.run!(@ctx)
|
58
58
|
assert_equal(':fancy', @strout.string.chomp)
|
59
59
|
end
|
@@ -61,7 +61,7 @@ class TestCommands < Test::Unit::TestCase
|
|
61
61
|
def test_multiple
|
62
62
|
@conn.expects(:query).with('one thing').returns(nil)
|
63
63
|
@conn.expects(:affected_rows).returns(1)
|
64
|
-
cmds = Commands.new('. "one thing" ; .
|
64
|
+
cmds = Commands.new('. "one thing" ; . puts :hello.inspect', :display_by_column)
|
65
65
|
cmds.run!(@ctx)
|
66
66
|
assert_match(/^QueryOK,1rowaffected\(\d+.\d+sec\):hello$/,
|
67
67
|
@strout.string.gsub(/\s+/,''))
|
data/test/test_eval_context.rb
CHANGED
@@ -28,7 +28,6 @@ class TestEvalContext < Test::Unit::TestCase
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_load
|
31
|
-
@conn.expects(:list_dbs).returns([])
|
32
31
|
orig = $stdout
|
33
32
|
$stdout = out = StringIO.new
|
34
33
|
@ctx.safe_eval('reload', nil, out)
|
@@ -97,8 +96,10 @@ class TestEvalContext < Test::Unit::TestCase
|
|
97
96
|
assert_equal('', out.string)
|
98
97
|
assert_equal('refusing to describe the version method', err.string.chomp)
|
99
98
|
|
99
|
+
err.string = ''
|
100
100
|
out.string = ''
|
101
101
|
val = @ctx.safe_eval('desc :cleanup_example', nil, out)
|
102
|
+
assert_equal('', err.string)
|
102
103
|
assert_equal('DROP TEMPORARY TABLE IF EXISTS #{@rsql_table}', out.string.strip)
|
103
104
|
|
104
105
|
out.string = ''
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 3
|
10
|
+
version: 0.2.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brad Robel-Forrest
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-09-
|
18
|
+
date: 2011-09-28 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: net-ssh
|