slyce 0.5.1 → 0.9.0

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/slyce +16 -12
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c731b8535e6d17c332c7e9e72934343d11e8be440f99fb8476dd6c0083c8676
4
- data.tar.gz: c65100a6813cfa59aaf2711d26c2ac2280ba803232fb04675541aebda58de8db
3
+ metadata.gz: 5b35094f0096060fd354165e0c24331549ae85eb73b3568c2ee25d318b4dada2
4
+ data.tar.gz: 4354a7b22ab2ba4628e85f34b2bf7275873d044c10dd16c4a624ca31ae61fed1
5
5
  SHA512:
6
- metadata.gz: aa404be4b51dd23be004502356d98f045248f017bf4cb2a86196a60c6d7b6268327f2559cff0be5e1b1e312c5982319edc84d48695600c724b9804e3460247ec
7
- data.tar.gz: 5bd8fbc834b2668e8f333092fa825b525015482fa07820b6045949b4a1b2dbeb4fe8049077a1cc569f6994f70ff1cabeea4381e7a78ab93d25a8e26830c0e57a
6
+ metadata.gz: a4ea7f796286ed343fef00dc1401ebf8960301975fbe40414834ae84c52162344f14521b5b2aea8073ff73aaa5122514552fa6d262246d2b738e95811d9747ab
7
+ data.tar.gz: 6f6fd02773c11cf9c25b788657f452fa310d6fe997fcf3aae3a7dfb6a4fa2fe2c2896ced81f13370db8b80c1252e23cbd84bcb26b22f3c5fad71fb62151847b2
data/bin/slyce CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  STDOUT.sync = true
4
4
 
5
- VERSION="0.5.1"
5
+ VERSION="0.9.0"
6
6
 
7
7
  require "bundler/setup"
8
8
  require "mysql2"
@@ -16,6 +16,7 @@ tabl = nil
16
16
  OptionParser.new.instance_eval do
17
17
  @banner = "usage: #{program_name} [options] <database> <table>"
18
18
 
19
+ on "-a", "--alpha" , "Sort alphabetically, not numerically"
19
20
  on "-c", "--columns" , "Display column names and quit"
20
21
  on "-h", "--help" , "Show help and command usage" do Kernel.abort to_s; end
21
22
  on "-s", "--show <count>" , "Show this many values", Integer
@@ -25,8 +26,9 @@ OptionParser.new.instance_eval do
25
26
  self
26
27
  end.parse!(into: opts={}) rescue abort($!.message)
27
28
 
29
+ abcd = opts[:alpha]
28
30
  show = opts[:show]
29
- keep = opts[:extract].to_s.downcase.split(",")
31
+ want = opts[:extract].to_s.downcase.split(",")
30
32
 
31
33
  dbas ||= ARGV.shift or Kernel.abort "no database given"
32
34
  tabl ||= ARGV.shift or Kernel.abort "no table given"
@@ -35,13 +37,14 @@ tabl ||= ARGV.shift or Kernel.abort "no table given"
35
37
 
36
38
  class Mysql2::Client
37
39
  def query!(stmt, *args, **, &)
38
- puts "\n==[ SQL statement ]==\n\n", stmt, ";"
40
+ puts "\n==[ SQL statement ]==\n\n", stmt.strip, ";"
39
41
  query(stmt, *args, **, &)
40
42
  end
41
43
  end
42
44
 
43
45
  def display(name, data, show, uniq, tots)
44
46
  seen = data.inject(0) {|seen, coun| seen += coun[0] }
47
+ rows = [data.size, seen].min
45
48
  wide = tots.to_s.size
46
49
  fill = " " * wide
47
50
  line = "=" * name.size
@@ -49,7 +52,7 @@ def display(name, data, show, uniq, tots)
49
52
  puts "\n#{fill} #{name}\n#{fill} #{line}\n"
50
53
  data.each {|cnt, val| puts "%*d %s" % [wide, cnt, val || "NULL"] }
51
54
  puts "#{fill} -----\n"
52
- puts "%*d shown (top #{show})" % [wide, seen] if show
55
+ puts "%*d shown (top #{rows})" % [wide, rows] if show
53
56
  puts "%*d total (all #{uniq})" % [wide, tots]
54
57
  end
55
58
 
@@ -58,16 +61,15 @@ end
58
61
  conn = Mysql2::Client.new(database: dbas, as: :array)
59
62
  resu = conn.query("select * from `#{tabl}` limit 0")
60
63
  cols = resu.fields
61
- keep = keep.empty? ? cols : keep & cols
64
+ want = want.empty? ? cols : want & cols
62
65
 
63
66
  if opts[:columns]
64
67
  puts cols
65
68
  exit
66
69
  end
67
70
 
68
- keep.each do |name|
69
-
70
- # data summary
71
+ want.each do |name|
72
+ sort = abcd ? "" : "cnt desc,"
71
73
  stmt = show ? "limit #{show}" : ""
72
74
  data = conn.query(<<~"" + stmt).to_a
73
75
  select
@@ -77,12 +79,15 @@ keep.each do |name|
77
79
  `#{tabl}`
78
80
  group by
79
81
  val
80
- order by
81
- cnt desc
82
+ order by #{sort}
83
+ -if(regexp_like(`#{name}`, '^[-+]?((0|([1-9]\\\\d*)(\\\\.\\\\d*)?)|((0|([1-9]\\\\d*))\\\\.\\\\d+))$'), `#{name}` + 0, null) desc,
84
+ -if(regexp_like(`#{name}`, '^0\\\\d+$'), length(`#{name}`), null) desc,
85
+ -if(regexp_like(`#{name}`, '^\\\\d'), regexp_instr(`#{name}`, '[^\\\\d]'), null) desc,
86
+ `#{name}` is null, `#{name}`
82
87
 
83
88
  uniq = conn.query(<<~"").to_a[0][0]
84
89
  select
85
- count(distinct(`#{name}`))
90
+ count(distinct(ifnull(`#{name}`,0)))
86
91
  from
87
92
  `#{tabl}`
88
93
 
@@ -93,5 +98,4 @@ keep.each do |name|
93
98
  `#{tabl}`
94
99
 
95
100
  display(name, data, show, uniq, tots)
96
-
97
101
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slyce
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Shreeve