sdbcli 0.3.5 → 0.3.6
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/sdbcli +1 -1
- data/lib/sdbcli/sdb-runner.rb +1 -1
- metadata +3 -4
- data/bin/sdbcli.orig +0 -208
data/bin/sdbcli
CHANGED
data/lib/sdbcli/sdb-runner.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sdbcli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 6
|
10
|
+
version: 0.3.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- winebarrel
|
@@ -42,7 +42,6 @@ extra_rdoc_files: []
|
|
42
42
|
files:
|
43
43
|
- README
|
44
44
|
- bin/sdbcli
|
45
|
-
- bin/sdbcli.orig
|
46
45
|
- lib/sdbcli/sdb-client.rb
|
47
46
|
- lib/sdbcli/sdb-driver.rb
|
48
47
|
- lib/sdbcli/sdb-parser.tab.rb
|
data/bin/sdbcli.orig
DELETED
@@ -1,208 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
$LOAD_PATH << File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib')
|
3
|
-
|
4
|
-
Version = '0.3.1'
|
5
|
-
HISTORY_FILE = File.join((ENV['HOME'] || ENV['USERPROFILE'] || '.'), '.sdbcli_history')
|
6
|
-
|
7
|
-
require 'rubygems'
|
8
|
-
require 'sdbcli'
|
9
|
-
|
10
|
-
require 'optparse'
|
11
|
-
require 'readline'
|
12
|
-
require 'strscan'
|
13
|
-
require 'syck' if /\A1\.9/ =~ RUBY_VERSION
|
14
|
-
require 'yaml'
|
15
|
-
|
16
|
-
access_key_id = ENV['AWS_ACCESS_KEY_ID']
|
17
|
-
secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
|
18
|
-
sdb_endpoint = ENV['SDB_ENDPOINT'] || ENV['REGION_NAME'] || 'sdb.amazonaws.com'
|
19
|
-
command = nil
|
20
|
-
enable_completion = false
|
21
|
-
|
22
|
-
ARGV.options do |opt|
|
23
|
-
opt.on('-k', '--access-key=ACCESS_KEY') {|v| access_key_id = v }
|
24
|
-
opt.on('-s', '--secret-key=SECRET_KEY') {|v| secret_access_key = v }
|
25
|
-
opt.on('-r', '--region=REGION') {|v| sdb_endpoint = v }
|
26
|
-
opt.on('-e', '--eval=COMMAND') {|v| command = v }
|
27
|
-
opt.on('', '--enable-comp') { enable_completion = true }
|
28
|
-
opt.parse!
|
29
|
-
|
30
|
-
unless access_key_id and secret_access_key and sdb_endpoint
|
31
|
-
puts opt.help
|
32
|
-
exit 1
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
if /\A[^.]+\Z/ =~ sdb_endpoint
|
37
|
-
if sdb_endpoint == 'us-east-1'
|
38
|
-
sdb_endpoint = 'sdb.amazonaws.com'
|
39
|
-
else
|
40
|
-
sdb_endpoint = "sdb.#{sdb_endpoint}.amazonaws.com"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
$runner = SimpleDB::Runner.new(access_key_id, secret_access_key, sdb_endpoint)
|
45
|
-
|
46
|
-
def output_error(msg)
|
47
|
-
$stderr.puts "ERROR: #{msg}\n\n"
|
48
|
-
end
|
49
|
-
|
50
|
-
def execute(src, show_rows = false)
|
51
|
-
ss = StringScanner.new(src.dup)
|
52
|
-
|
53
|
-
while query = ss.scan_until(/(?:;|\\G)/i)
|
54
|
-
src.replace(ss.rest.strip)
|
55
|
-
query.strip!
|
56
|
-
|
57
|
-
if query =~ /\s*\\G\Z/i
|
58
|
-
query = query.sub(/\s*\\G\Z/i, '')
|
59
|
-
inline = false
|
60
|
-
else
|
61
|
-
query = query.strip.sub(/\s*;\Z/, '')
|
62
|
-
inline = true
|
63
|
-
end
|
64
|
-
|
65
|
-
if query.empty?
|
66
|
-
output_error('No query specified')
|
67
|
-
next
|
68
|
-
end
|
69
|
-
|
70
|
-
out = $runner.execute(query, inline)
|
71
|
-
|
72
|
-
if out
|
73
|
-
str = YAML.dump(out).sub(/(?:\r\n|\r|\n)*\Z/, "\n")
|
74
|
-
|
75
|
-
if show_rows and out.kind_of?(Array)
|
76
|
-
str << "# #{out.length} rows in set\n"
|
77
|
-
end
|
78
|
-
|
79
|
-
str << "\n"
|
80
|
-
puts str
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
ss.rest.strip
|
85
|
-
end
|
86
|
-
|
87
|
-
if not $stdin.tty? or command
|
88
|
-
src = command || $stdin.read.strip
|
89
|
-
|
90
|
-
unless src =~ /\s*(?:;|\\G)\Z/i
|
91
|
-
src << ';'
|
92
|
-
end
|
93
|
-
|
94
|
-
begin
|
95
|
-
execute(src)
|
96
|
-
exit 0
|
97
|
-
rescue Racc::ParseError
|
98
|
-
output_error 'Parse error'
|
99
|
-
exit 1
|
100
|
-
rescue => e
|
101
|
-
output_error e.message.strip
|
102
|
-
exit 1
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def help
|
107
|
-
<<-EOS
|
108
|
-
SHOW domains
|
109
|
-
displays a domain list
|
110
|
-
|
111
|
-
CREATE domain domain_name
|
112
|
-
creates a domain
|
113
|
-
|
114
|
-
DROP DOMAIN domain_name
|
115
|
-
deletes a domain
|
116
|
-
|
117
|
-
GET [attr_list] FROM domain_name WHERE itemName = '...'
|
118
|
-
gets the attribute of an item
|
119
|
-
|
120
|
-
INSERT INTO domain_name (itemName, attr1, ...) values ('name', 'val1', ...)
|
121
|
-
creates an item
|
122
|
-
|
123
|
-
UPDATE domain_name set attr1 = 'val1', ... where itemName = '...'
|
124
|
-
updates an item
|
125
|
-
|
126
|
-
DELETE [attr1, ...] FROM domain_name itemName = '...'
|
127
|
-
deletes the attribute of an item or an item
|
128
|
-
|
129
|
-
SELECT output_list FROM domain_name [where expression] [sort_instructions] [limit limit]
|
130
|
-
queries using the SELECT statement
|
131
|
-
|
132
|
-
DESC domain_name
|
133
|
-
displays information about the domain;
|
134
|
-
|
135
|
-
EOS
|
136
|
-
end
|
137
|
-
|
138
|
-
if File.exist?(HISTORY_FILE)
|
139
|
-
open(HISTORY_FILE) do |f|
|
140
|
-
f.each_line do |line|
|
141
|
-
line = line.strip
|
142
|
-
Readline::HISTORY.push(line) unless line.empty?
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
at_exit do
|
148
|
-
unless Readline::HISTORY.empty?
|
149
|
-
open(HISTORY_FILE, 'wb') do |f|
|
150
|
-
Readline::HISTORY.each do |line|
|
151
|
-
next if /\A\s*\Z/ =~ line
|
152
|
-
f.puts line
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
src = ''
|
159
|
-
region = $runner.region || 'unknown'
|
160
|
-
prompt1 = "#{region}> "
|
161
|
-
prompt2 = "#{' ' * (region.length - 1)}-> "
|
162
|
-
prompt = prompt1
|
163
|
-
|
164
|
-
$keywords = SimpleDB::Parser::KEYWORDS + ['SELECT', 'COUNT(*)', 'itemName']
|
165
|
-
$keywords.delete('ITEMNAME')
|
166
|
-
|
167
|
-
begin
|
168
|
-
$runner.driver.show_domains.each {|i| $keywords << i }
|
169
|
-
rescue Exception
|
170
|
-
end
|
171
|
-
|
172
|
-
Readline.completion_proc = proc {|word|
|
173
|
-
$keywords.grep(/\A#{Regexp.quote word}/i)
|
174
|
-
}
|
175
|
-
|
176
|
-
while buf = Readline.readline(prompt, true)
|
177
|
-
if /\A\s*\Z/ =~ buf
|
178
|
-
Readline::HISTORY.pop
|
179
|
-
next
|
180
|
-
end
|
181
|
-
|
182
|
-
if src.empty? and buf =~ /\A\.(.+)/
|
183
|
-
r = /\A#{Regexp.compile($1.downcase)}/
|
184
|
-
|
185
|
-
if r =~ 'help'
|
186
|
-
puts help
|
187
|
-
elsif r =~ 'exit' or r =~ 'quit'
|
188
|
-
exit
|
189
|
-
elsif r =~ 'version'
|
190
|
-
puts "sdbcli #{Version}"
|
191
|
-
else
|
192
|
-
output_error('Unknown command')
|
193
|
-
end
|
194
|
-
else
|
195
|
-
rv = nil
|
196
|
-
|
197
|
-
begin
|
198
|
-
src << (' ' + buf)
|
199
|
-
execute(src, true)
|
200
|
-
rescue Racc::ParseError
|
201
|
-
output_error 'Parse error'
|
202
|
-
rescue => e
|
203
|
-
output_error e.message.strip
|
204
|
-
end
|
205
|
-
|
206
|
-
prompt = src.empty? ? prompt1 : prompt2
|
207
|
-
end
|
208
|
-
end
|