activerecord-analyze 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2c1961ed7400cf716abcc28764176bdf02b4c3eb
4
+ data.tar.gz: c982bed6eb37c9413bbec9785416f96b9c55490c
5
+ SHA512:
6
+ metadata.gz: 5f57e1be57c643f06a0ba3036a0e2709ce9ac799c3a02ca7a0c1cce99d92340b9b0a7d574f8c8652d52ee522a3c5edbccec8ea5f8d1d8fbd21468c1c20372ec7
7
+ data.tar.gz: 432321449fdff40d5f410cb635b4f20448437c471526c87de4eaa25782cae474a816abf4f64a871804a8009d8d80e68989cac75fa09d342b7fa590ac89d59163
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ Gemfile.lock
2
+ .ruby-version
3
+ pkg/
4
+ *.gem
5
+ coverage/
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2018 Paweł Urbanek
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # ActiveRecord Analyze
2
+
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'activerecord-analyze/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "activerecord-analyze"
8
+ gem.version = ActiveRecordAnalyze::VERSION
9
+ gem.authors = ["pawurb"]
10
+ gem.email = ["p.urbanek89@gmail.com"]
11
+ gem.summary = %q{ Add EXPLAIN ANALYZE to Active Record query objects }
12
+ gem.description = %q{ Gem adds an "analyze" method to all Active Record query objects. Compatible with PostgreSQL database. }
13
+ gem.homepage = "http://github.com/pawurb/activerecord-analyze"
14
+ gem.files = `git ls-files`.split("\n")
15
+ gem.test_files = gem.files.grep(%r{^(spec)/})
16
+ gem.require_paths = ["lib"]
17
+ gem.license = "MIT"
18
+ gem.add_dependency "rails", "~> 5.1.0"
19
+ end
@@ -0,0 +1,2 @@
1
+ module ActiveRecordAnalyze
2
+ end
@@ -0,0 +1,44 @@
1
+ module ActiveRecord
2
+ module ConnectionAdapters
3
+ module PostgreSQL
4
+ module DatabaseStatements
5
+ def analyze(arel, binds = [])
6
+ sql = "EXPLAIN ANALYZE #{to_sql(arel, binds)}"
7
+ PostgreSQL::ExplainPrettyPrinter.new.pp(exec_query(sql, "EXPLAIN ANALYZE", binds))
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ module ActiveRecord
15
+ class Relation
16
+ def analyze
17
+ exec_analyze(collecting_queries_for_explain { exec_queries })
18
+ end
19
+ end
20
+ end
21
+
22
+ module ActiveRecord
23
+ module Explain
24
+ def exec_analyze(queries) # :nodoc:
25
+ str = queries.map do |sql, binds|
26
+ msg = "EXPLAIN ANALYZE for: #{sql}".dup
27
+ unless binds.empty?
28
+ msg << " "
29
+ msg << binds.map { |attr| render_bind(attr) }.inspect
30
+ end
31
+ msg << "\n"
32
+ msg << connection.analyze(sql, binds)
33
+ end.join("\n")
34
+
35
+ # Overriding inspect to be more human readable, especially in the console.
36
+ def str.inspect
37
+ self
38
+ end
39
+
40
+ str
41
+ end
42
+ end
43
+ end
44
+
@@ -0,0 +1,3 @@
1
+ module ActiveRecordAnalyze
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activerecord-analyze
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - pawurb
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 5.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 5.1.0
27
+ description: ' Gem adds an "analyze" method to all Active Record query objects. Compatible
28
+ with PostgreSQL database. '
29
+ email:
30
+ - p.urbanek89@gmail.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - ".gitignore"
36
+ - Gemfile
37
+ - LICENSE.txt
38
+ - README.md
39
+ - Rakefile
40
+ - activerecord-analyze.gemspec
41
+ - lib/activerecord-analyze.rb
42
+ - lib/activerecord-analyze/main.rb
43
+ - lib/activerecord-analyze/version.rb
44
+ homepage: http://github.com/pawurb/activerecord-analyze
45
+ licenses:
46
+ - MIT
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 2.6.14
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: Add EXPLAIN ANALYZE to Active Record query objects
68
+ test_files: []