sdbcli 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README +5 -4
- data/bin/sdbcli +7 -6
- data/bin/sdbcli.orig +208 -0
- data/lib/sdbcli/sdb-runner.rb.orig +83 -0
- metadata +51 -33
data/README
CHANGED
@@ -44,17 +44,18 @@ https://bitbucket.org/winebarrel/sdbcli
|
|
44
44
|
GET [attr_list] FROM domain_name WHERE itemName = '...'
|
45
45
|
gets the attribute of an item
|
46
46
|
|
47
|
-
INSERT INTO domain_name (itemName, attr1, ...)
|
47
|
+
INSERT INTO domain_name (itemName, attr1, ...) VALUES ('name', 'val1', ...)
|
48
48
|
creates an item
|
49
49
|
|
50
|
-
UPDATE domain_name set attr1 = 'val1', ...
|
50
|
+
UPDATE domain_name set attr1 = 'val1', ... WHERE itemName = '...'
|
51
51
|
updates an item
|
52
52
|
|
53
|
-
DELETE [attr1, ...] FROM domain_name itemName = '...'
|
53
|
+
DELETE [attr1, ...] FROM domain_name WHERE itemName = '...'
|
54
54
|
deletes the attribute of an item or an item
|
55
55
|
|
56
|
-
SELECT output_list FROM domain_name [
|
56
|
+
SELECT output_list FROM domain_name [WHERE expression] [sort_instructions] [LIMIT limit]
|
57
57
|
queries using the SELECT statement
|
58
|
+
see http://docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/UsingSelect.html
|
58
59
|
|
59
60
|
DESC domain_name
|
60
61
|
displays information about the domain
|
data/bin/sdbcli
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
$LOAD_PATH << File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib')
|
3
3
|
|
4
|
-
Version = '0.3.
|
4
|
+
Version = '0.3.5'
|
5
5
|
HISTORY_FILE = File.join((ENV['HOME'] || ENV['USERPROFILE'] || '.'), '.sdbcli_history')
|
6
6
|
HISTSIZE = 500
|
7
7
|
|
@@ -108,17 +108,18 @@ DROP DOMAIN domain_name
|
|
108
108
|
GET [attr_list] FROM domain_name WHERE itemName = '...'
|
109
109
|
gets the attribute of an item
|
110
110
|
|
111
|
-
INSERT INTO domain_name (itemName, attr1, ...)
|
111
|
+
INSERT INTO domain_name (itemName, attr1, ...) VALUES ('name', 'val1', ...)
|
112
112
|
creates an item
|
113
113
|
|
114
|
-
UPDATE domain_name set attr1 = 'val1', ...
|
114
|
+
UPDATE domain_name set attr1 = 'val1', ... WHERE itemName = '...'
|
115
115
|
updates an item
|
116
116
|
|
117
|
-
DELETE [attr1, ...] FROM domain_name itemName = '...'
|
117
|
+
DELETE [attr1, ...] FROM domain_name WHERE itemName = '...'
|
118
118
|
deletes the attribute of an item or an item
|
119
119
|
|
120
|
-
SELECT output_list FROM domain_name [
|
120
|
+
SELECT output_list FROM domain_name [WHERE expression] [sort_instructions] [LIMIT limit]
|
121
121
|
queries using the SELECT statement
|
122
|
+
see http://docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/UsingSelect.html
|
122
123
|
|
123
124
|
DESC domain_name
|
124
125
|
displays information about the domain
|
@@ -141,7 +142,7 @@ end
|
|
141
142
|
at_exit do
|
142
143
|
unless Readline::HISTORY.empty?
|
143
144
|
open(HISTORY_FILE, 'wb') do |f|
|
144
|
-
Readline::HISTORY.to_a.slice(-(Readline::HISTORY.length < HISTSIZE ? Readline::HISTORY.length : HISTSIZE)..-1).each do |line|
|
145
|
+
(Readline::HISTORY.to_a.slice(-(Readline::HISTORY.length < HISTSIZE ? Readline::HISTORY.length : HISTSIZE)..-1) || []).each do |line|
|
145
146
|
next if /\A\s*\Z/ =~ line
|
146
147
|
f.puts line
|
147
148
|
end
|
data/bin/sdbcli.orig
ADDED
@@ -0,0 +1,208 @@
|
|
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
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'sdbcli/sdb-driver'
|
2
|
+
require 'sdbcli/sdb-parser.tab'
|
3
|
+
|
4
|
+
module SimpleDB
|
5
|
+
class Error < StandardError; end
|
6
|
+
|
7
|
+
REGIONS = {
|
8
|
+
'sdb.amazonaws.com' => 'us-east-1',
|
9
|
+
'sdb.us-west-1.amazonaws.com' => 'us-west-1',
|
10
|
+
'sdb.us-west-2.amazonaws.com' => 'us-west-2',
|
11
|
+
'sdb.eu-west-1.amazonaws.com' => 'eu-west-1',
|
12
|
+
'sdb.ap-southeast-1.amazonaws.com' => 'ap-southeast-1',
|
13
|
+
'sdb.ap-northeast-1.amazonaws.com' => 'ap-northeast-1',
|
14
|
+
'sdb.sa-east-1.amazonaws.com' => 'sa-east-1',
|
15
|
+
}
|
16
|
+
|
17
|
+
class Runner
|
18
|
+
attr_reader :driver
|
19
|
+
|
20
|
+
def initialize(accessKeyId, secretAccessKey, endpoint = 'sdb.amazonaws.com')
|
21
|
+
@driver = Driver.new(accessKeyId, secretAccessKey, endpoint)
|
22
|
+
end
|
23
|
+
|
24
|
+
def endpoint
|
25
|
+
@driver.endpoint
|
26
|
+
end
|
27
|
+
|
28
|
+
def endpoint=(v)
|
29
|
+
@driver.endpoint = v
|
30
|
+
end
|
31
|
+
|
32
|
+
def region
|
33
|
+
REGIONS[endpoint]
|
34
|
+
end
|
35
|
+
|
36
|
+
def execute(query, inline = true)
|
37
|
+
parsed = Parser.parse(query)
|
38
|
+
command = parsed.class.name.split('::').last.to_sym
|
39
|
+
|
40
|
+
case command
|
41
|
+
when :GET
|
42
|
+
item = @driver.get(parsed.domain, parsed.item_name, parsed.attr_names)
|
43
|
+
|
44
|
+
if inline
|
45
|
+
def item.to_yaml_style; :inline; end
|
46
|
+
end
|
47
|
+
|
48
|
+
item
|
49
|
+
when :INSERT
|
50
|
+
@driver.insert(parsed.domain, parsed.item_name, parsed.attrs)
|
51
|
+
nil
|
52
|
+
when :UPDATE
|
53
|
+
@driver.update(parsed.domain, parsed.items)
|
54
|
+
nil
|
55
|
+
when :DELETE
|
56
|
+
@driver.delete(parsed.domain, parsed.items)
|
57
|
+
nil
|
58
|
+
when :SELECT
|
59
|
+
items = @driver.select(parsed.query)
|
60
|
+
|
61
|
+
if inline
|
62
|
+
items.each do |item|
|
63
|
+
def item.to_yaml_style; :inline; end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
items
|
68
|
+
when :CREATE
|
69
|
+
@driver.create_domain(parsed.domain)
|
70
|
+
nil
|
71
|
+
when :DROP
|
72
|
+
@driver.drop_domain(parsed.domain)
|
73
|
+
nil
|
74
|
+
when :SHOW
|
75
|
+
@driver.show_domains
|
76
|
+
when :DESCRIBE
|
77
|
+
@driver.describe(parsed.domain)
|
78
|
+
else
|
79
|
+
raise 'must not happen'
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end # Runner
|
83
|
+
end # SimpleDB
|
metadata
CHANGED
@@ -1,69 +1,87 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: sdbcli
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 3
|
9
|
+
- 5
|
10
|
+
version: 0.3.5
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- winebarrel
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
17
|
+
|
18
|
+
date: 2013-01-21 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: nokogiri
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :runtime
|
23
22
|
prerelease: false
|
24
|
-
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
30
34
|
description:
|
31
35
|
email: sgwr_dts@yahoo.co.jp
|
32
|
-
executables:
|
36
|
+
executables:
|
33
37
|
- sdbcli
|
34
38
|
extensions: []
|
39
|
+
|
35
40
|
extra_rdoc_files: []
|
36
|
-
|
41
|
+
|
42
|
+
files:
|
37
43
|
- README
|
38
44
|
- bin/sdbcli
|
45
|
+
- bin/sdbcli.orig
|
39
46
|
- lib/sdbcli/sdb-client.rb
|
40
47
|
- lib/sdbcli/sdb-driver.rb
|
41
48
|
- lib/sdbcli/sdb-parser.tab.rb
|
42
49
|
- lib/sdbcli/sdb-parser.y
|
43
50
|
- lib/sdbcli/sdb-runner.rb
|
51
|
+
- lib/sdbcli/sdb-runner.rb.orig
|
44
52
|
- lib/sdbcli.rb
|
45
53
|
homepage: https://bitbucket.org/winebarrel/sdbcli
|
46
54
|
licenses: []
|
55
|
+
|
47
56
|
post_install_message:
|
48
57
|
rdoc_options: []
|
49
|
-
|
58
|
+
|
59
|
+
require_paths:
|
50
60
|
- lib
|
51
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
62
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
hash: 3
|
67
|
+
segments:
|
68
|
+
- 0
|
69
|
+
version: "0"
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
71
|
none: false
|
59
|
-
requirements:
|
60
|
-
- -
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
63
79
|
requirements: []
|
80
|
+
|
64
81
|
rubyforge_project:
|
65
|
-
rubygems_version: 1.8.
|
82
|
+
rubygems_version: 1.8.24
|
66
83
|
signing_key:
|
67
84
|
specification_version: 3
|
68
85
|
summary: sdbcli is an interactive command-line client of Amazon SimpleDB.
|
69
86
|
test_files: []
|
87
|
+
|