sdbcli 0.3.4 → 0.3.5
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/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
|
+
|