hotdog 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fccd372d49246c2c85768c9244a29746fafcfb40
4
- data.tar.gz: 9b4d490218a3d93af4806b12d47dfca28f8d90f8
3
+ metadata.gz: 4a7e366b9cd85e46e711e2ca82472a2d278db17a
4
+ data.tar.gz: 502752fef200c4abf66772c31dc0b8f6e19a3538
5
5
  SHA512:
6
- metadata.gz: 8e21eb61e7ccfc2b533e005eb1f494ead1c16c12cd21e0384d46228e88f3a5d6771a62f9006fca59bc538e680e4a7370f1a1905c3e1aa314ea368e4b97146a92
7
- data.tar.gz: 654ccf67781c3c1a7ebc1f59fac07a5dd6319231474e6ffadcd08309d32b062efe7e543c1db83f7d821bb054a6ea31c111b7c717f63f0692b3929a6fc79df971
6
+ metadata.gz: 28f25b9273cf877a5c7ee381733f5645eec06e8c40ddb743c6e07becca306bcf270fc4f85a1bc4eba691316cc7d11aac67a77dbab8ed421c11137042f3f03bfa
7
+ data.tar.gz: 587039692f3cc6cb5f7c7436487e8d1300dc54457468e6d19f2075bd9f1b0b6a3af21774ef6be44bf3bcb528749756531b5a490c17cb52f521b449a62fcb0373
@@ -7,24 +7,35 @@ module Hotdog
7
7
  args = optparse.parse(args)
8
8
  if args.empty?
9
9
  result = execute("SELECT id FROM hosts").to_a.reduce(:+)
10
+ show_hosts(result)
10
11
  else
11
- result = args.flat_map { |host_name|
12
- if glob?(host_name)
13
- execute("SELECT id FROM hosts WHERE name GLOB ?", [host_name]).to_a.reduce(:+)
14
- else
15
- execute("SELECT id FROM hosts WHERE name = ?", [host_name]).to_a.reduce(:+)
12
+ if args.any? { |host_name| glob?(host_name) }
13
+ result = args.flat_map { |host_name|
14
+ execute("SELECT id FROM hosts WHERE name GLOB ?;", [host_name]).to_a.reduce(:+) || []
15
+ }
16
+ else
17
+ result = args.each_slice(SQLITE_LIMIT_COMPOUND_SELECT).flat_map { |args|
18
+ execute("SELECT id FROM hosts WHERE name IN (%s);" % args.map { "?" }.join(", "), args).to_a.reduce(:+) || []
19
+ }
20
+ end
21
+ if result.empty?
22
+ STDERR.puts("no match found: #{args.join(" ")}")
23
+ exit(1)
24
+ else
25
+ show_hosts(result)
26
+ logger.info("found %d host(s)." % result.length)
27
+ if result.length < args.length
28
+ STDERR.puts("insufficient result: #{args.join(" ")}")
29
+ exit(1)
16
30
  end
17
- }
18
- end
19
- if result && (0 < result.length)
20
- result, fields = get_hosts(result)
21
- STDOUT.print(format(result, fields: fields))
22
- logger.info("found %d host(s)." % result.length)
23
- else
24
- STDERR.puts("no match found: #{args.join(" ")}")
25
- exit(1)
31
+ end
26
32
  end
27
33
  end
34
+
35
+ def show_hosts(hosts)
36
+ result, fields = get_hosts(hosts || [])
37
+ STDOUT.print(format(result, fields: fields))
38
+ end
28
39
  end
29
40
  end
30
41
  end
@@ -114,12 +114,15 @@ module Hotdog
114
114
  )
115
115
  }
116
116
  rule(:binary_op) {
117
- ( str('and') \
117
+ ( str('AND') \
118
+ | str('OR') \
119
+ | str('and') \
118
120
  | str('or') \
119
121
  )
120
122
  }
121
123
  rule(:unary_op) {
122
- ( str('not') \
124
+ ( str('NOT') \
125
+ | str('not') \
123
126
  )
124
127
  }
125
128
  rule(:atom) {
@@ -5,47 +5,41 @@ module Hotdog
5
5
  class Tags < BaseCommand
6
6
  def run(args=[])
7
7
  args = optparse.parse(args)
8
- if 0 < args.length
9
- fields = args.map { |tag|
10
- tag_name, tag_value = split_tag(tag)
11
- tag_name
12
- }
13
- result1 = args.map { |tag|
14
- tag_name, tag_value = split_tag(tag)
15
- if glob?(tag_name)
16
- if tag_value.empty?
17
- execute("SELECT DISTINCT value FROM tags WHERE name GLOB ?", [tag_name]).map { |row| row.join(",") }
18
- else
19
- if glob?(tag_value)
20
- execute("SELECT DISTINCT value FROM tags WHERE name GLOB ? AND value GLOB ?", [tag_name, tag_value]).map { |row| row.join(",") }
21
- else
22
- execute("SELECT DISTINCT value FROM tags WHERE name GLOB ? AND value = ?", [tag_name, tag_value]).map { |row| row.join(",") }
23
- end
24
- end
25
- else
26
- if tag_value.empty?
27
- execute("SELECT DISTINCT value FROM tags WHERE name = ?", [tag_name]).map { |row| row.join(",") }
28
- else
29
- if glob?(tag_value)
30
- execute("SELECT DISTINCT value FROM tags WHERE name = ? AND value GLOB ?", [tag_name, tag_value]).map { |row| row.join(",") }
31
- else
32
- execute("SELECT DISTINCT value FROM tags WHERE name = ? AND value = ?", [tag_name, tag_value]).map { |row| row.join(",") }
33
- end
34
- end
35
- end
36
- }
37
- result = (0...result1.reduce(0) { |max, values| [max, values.length].max }).map { |field_index|
38
- result1.map { |values| values[field_index] }
39
- }
8
+ if args.empty?
9
+ result = execute("SELECT name, value FROM tags").map { |name, value| [join_tag(name, value)] }
10
+ show_tags(result)
40
11
  else
41
- fields = ["tag"]
42
- result = execute("SELECT DISTINCT name, value FROM tags").map { |name, value| [0 < value.length ? "#{name}:#{value}" : name] }
43
- end
44
- if 0 < result.length
45
- STDOUT.print(format(result, fields: fields))
46
- logger.info("found %d tag(s)." % result.length)
12
+ tags = args.map { |tag| split_tag(tag) }
13
+ if tags.all? { |tag_name, tag_value| tag_value.empty? }
14
+ result = tags.each_slice(SQLITE_LIMIT_COMPOUND_SELECT).flat_map { |tags|
15
+ q = "SELECT value FROM tags " \
16
+ "WHERE %s;" % tags.map { |tag_name, tag_value| glob?(tag_name) ? "name GLOB ?" : "name = ?" }.join(" OR ")
17
+ execute(q, tags.map { |tag_name, tag_value| tag_name }).map { |value| [value] }
18
+ }
19
+ else
20
+ result = tags.each_slice(SQLITE_LIMIT_COMPOUND_SELECT / 2).flat_map { |tags|
21
+ q = "SELECT value FROM tags " \
22
+ "WHERE %s;" % tags.map { |tag_name, tag_value| (glob?(tag_name) or glob?(tag_value)) ? "( name GLOB ? AND value GLOB ? )" : "( name = ? AND value = ? )" }.join(" OR ")
23
+ execute(q, tags).map { |value| [value] }
24
+ }
25
+ end
26
+ if result.empty?
27
+ STDERR.puts("no match found: #{args.join(" ")}")
28
+ exit(1)
29
+ else
30
+ show_tags(result)
31
+ logger.info("found %d tag(s)." % result.length)
32
+ if result.length < args.length
33
+ STDERR.puts("insufficient result: #{args.join(" ")}")
34
+ exit(1)
35
+ end
36
+ end
47
37
  end
48
38
  end
39
+
40
+ def show_tags(tags)
41
+ STDOUT.print(format(tags, fields: ["tag"]))
42
+ end
49
43
  end
50
44
  end
51
45
  end
@@ -252,6 +252,14 @@ module Hotdog
252
252
  [tag_name, tag_value || ""]
253
253
  end
254
254
 
255
+ def join_tag(tag_name, tag_value)
256
+ if tag_value.to_s.empty?
257
+ tag_name
258
+ else
259
+ "#{tag_name}:#{tag_value}"
260
+ end
261
+ end
262
+
255
263
  def copy_db(src, dst)
256
264
  # create index later for better insert performance
257
265
  dst.transaction do
@@ -1,3 +1,3 @@
1
1
  module Hotdog
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hotdog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yamashita Yuu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-12 00:00:00.000000000 Z
11
+ date: 2015-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler