rails_sql_prettifier 5.0.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 +7 -0
- data/.byebug_history +36 -0
- data/.gitignore +11 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/CHANGELOG.md +0 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +21 -0
- data/README.md +160 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/err_now.png +0 -0
- data/err_was.png +0 -0
- data/lib/benchmark/cat.rb +34 -0
- data/lib/benchmark/gsub.rb +34 -0
- data/lib/benchmark/txt +748 -0
- data/lib/generators/niceql/install_generator.rb +14 -0
- data/lib/generators/templates/niceql_initializer.rb +11 -0
- data/lib/rails_sql_prettifier/version.rb +3 -0
- data/lib/rails_sql_prettifier.rb +89 -0
- data/rails_sql_prettifier.gemspec +46 -0
- data/to_niceql.png +0 -0
- metadata +193 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fd1acaf8f6f82312ccb1422330645c2365b3e4f93c9874da2645c62866310836
|
4
|
+
data.tar.gz: bad3c23c4af4d0d3d3d8200f2ae38309df6cc332e92ab6466713f1956ee91739
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3b16a4ee0ba376dc3f7ae3e3d2eaec46bd08cdda2e525b4a59be827e82ae5c161d90fd236e418bb226a8cca54aaebf6e5e590161fa529f52c25e0f025db27e42
|
7
|
+
data.tar.gz: ab755ea34ed0bc3c910ee02895a94a35c7a1f4de4d123188f66985a9cd68950f8d708cdc3ba8d5cf7a590403b8e77c4186ebae44ecc31d5e1fcc8cc0dca63836
|
data/.byebug_history
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
c
|
2
|
+
ActiveRecord.version <= Gem::Version.new(5)
|
3
|
+
c
|
4
|
+
ActiveRecord.version
|
5
|
+
exit
|
6
|
+
ActiveRecord.version
|
7
|
+
c
|
8
|
+
exit
|
9
|
+
si.sql
|
10
|
+
si
|
11
|
+
c
|
12
|
+
sql_body
|
13
|
+
n
|
14
|
+
s
|
15
|
+
original_sql_query
|
16
|
+
err
|
17
|
+
s
|
18
|
+
up
|
19
|
+
s
|
20
|
+
up
|
21
|
+
s
|
22
|
+
up
|
23
|
+
s
|
24
|
+
super
|
25
|
+
try(:sql)
|
26
|
+
Niceql.config.prettify_pg_errors
|
27
|
+
c
|
28
|
+
exit
|
29
|
+
err_template
|
30
|
+
si.to_s
|
31
|
+
exit
|
32
|
+
err_caret_line
|
33
|
+
err_quote_caret_offset
|
34
|
+
c
|
35
|
+
err.lines[1].index( '...' ).to_i
|
36
|
+
err_caret_line
|
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rails_sql_prettifier_ar_5
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.7.2
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
File without changes
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2017 alekseyl
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,160 @@
|
|
1
|
+
# RailsSQLPrettifier
|
2
|
+
|
3
|
+
This is an ActiveRecord integration for a niceql gem.
|
4
|
+
Niceql is a small, nice, simple and zero dependency solution for SQL prettifying for Ruby.
|
5
|
+
|
6
|
+
Any reasonable suggestions are welcome.
|
7
|
+
|
8
|
+
**Please pay attention: until issue https://github.com/alekseyl/niceql/issues/16 is resolved any UPDATE or INSERT request might corrupt your data, don't use on production!**
|
9
|
+
|
10
|
+
|
11
|
+
## Before/After
|
12
|
+
### SQL prettifier:
|
13
|
+

|
14
|
+
|
15
|
+
### PG errors prettifier
|
16
|
+
|
17
|
+
before:
|
18
|
+

|
19
|
+
|
20
|
+
after:
|
21
|
+

|
22
|
+
|
23
|
+
|
24
|
+
## Installation
|
25
|
+
|
26
|
+
Add this line to your application's Gemfile:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
gem 'rails_sql_prettifier'
|
30
|
+
```
|
31
|
+
|
32
|
+
And then execute:
|
33
|
+
|
34
|
+
$ bundle
|
35
|
+
# if you are using rails, you may want to install niceql config:
|
36
|
+
rails g niceql:install
|
37
|
+
|
38
|
+
Or install it yourself as:
|
39
|
+
|
40
|
+
$ gem install niceql
|
41
|
+
|
42
|
+
## Configuration
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
Niceql.configure do |c|
|
46
|
+
# Setting pg_adapter_with_nicesql to true will force formatting SQL queries
|
47
|
+
# before execution. Formatted SQL will lead to much better SQL-query debugging and much more clearer error messages
|
48
|
+
# if you are using Postgresql as a data source.
|
49
|
+
# BUT do not use it in production until https://github.com/alekseyl/niceql/issues/16 is resolved
|
50
|
+
#
|
51
|
+
# You can adjust pg_adapter in production but do it at your own risk!
|
52
|
+
#
|
53
|
+
# If you need to debug SQL queries in production use exec_niceql
|
54
|
+
#
|
55
|
+
# default value for pg_adapter_with_nicesql: false
|
56
|
+
# uncomment next string to enable in development
|
57
|
+
# c.pg_adapter_with_nicesql = Rails.env.development?
|
58
|
+
|
59
|
+
# uncomment next string if you want to log prettified SQL inside ActiveRecord logging.
|
60
|
+
# default: false
|
61
|
+
# c.prettify_active_record_log_output = true
|
62
|
+
|
63
|
+
# Error prettifying is also configurable
|
64
|
+
# default: defined? ::ActiveRecord::Base && ActiveRecord::Base.configurations[Rails.env]['adapter'] == 'postgresql'
|
65
|
+
# c.prettify_pg_errors = defined? ::ActiveRecord::Base && ActiveRecord::Base.configurations[Rails.env]['adapter'] == 'postgresql'
|
66
|
+
|
67
|
+
# spaces count for one indentation, default is 2
|
68
|
+
c.indentation_base = 2
|
69
|
+
|
70
|
+
# setting open_bracket_is_newliner to true will start opening brackets '(' with nested subqueries from new line
|
71
|
+
# i.e. SELECT * FROM ( SELECT * FROM tags ) tags; will transform to:
|
72
|
+
# SELECT *
|
73
|
+
# FROM
|
74
|
+
# (
|
75
|
+
# SELECT * FROM tags
|
76
|
+
# ) tags;
|
77
|
+
# when open_bracket_is_newliner is false:
|
78
|
+
# SELECT *
|
79
|
+
# FROM (
|
80
|
+
# SELECT * FROM tags
|
81
|
+
# ) tags;
|
82
|
+
# default: false
|
83
|
+
c.open_bracket_is_newliner = false
|
84
|
+
end
|
85
|
+
```
|
86
|
+
|
87
|
+
## Usage
|
88
|
+
|
89
|
+
### With ActiveRecord
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
# puts colorized and formatted corresponding SQL query
|
93
|
+
Model.scope.niceql
|
94
|
+
|
95
|
+
# only formatting without colorization, you can run output of to_niceql as a SQL query in connection.execute
|
96
|
+
Model.scope.to_niceql
|
97
|
+
|
98
|
+
# prettify PG errors if scope runs with any
|
99
|
+
Model.scope_with_err.exec_niceql
|
100
|
+
```
|
101
|
+
|
102
|
+
### Raw usage of niceql
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
|
106
|
+
puts Niceql::Prettifier.prettify_sql("SELECT * FROM ( VALUES(1), (2) ) AS tmp")
|
107
|
+
#=> SELECT *
|
108
|
+
#=> FROM ( VALUES(1), (2) ) AS tmp
|
109
|
+
|
110
|
+
puts Niceql::Prettifier.prettify_multiple("SELECT * FROM ( VALUES(1), (2) ) AS tmp; SELECT * FROM table")
|
111
|
+
|
112
|
+
#=> SELECT *
|
113
|
+
#=> FROM ( VALUES(1), (2) ) AS tmp;
|
114
|
+
#=>
|
115
|
+
#=> SELECT *
|
116
|
+
#=> FROM table
|
117
|
+
|
118
|
+
|
119
|
+
puts Niceql::Prettifier.prettify_pg_err( pg_err_output, sql_query )
|
120
|
+
|
121
|
+
# to get real nice result you should execute prettified version (i.e. execute( prettified_sql ) !) of query on your DB!
|
122
|
+
# otherwise you will not get such a nice output
|
123
|
+
raw_sql = <<~SQL
|
124
|
+
SELECT err
|
125
|
+
FROM ( VALUES(1), (2) )
|
126
|
+
ORDER BY 1
|
127
|
+
SQL
|
128
|
+
|
129
|
+
puts Niceql::Prettifier.prettify_pg_err(<<~ERR, raw_sql )
|
130
|
+
ERROR: VALUES in FROM must have an alias
|
131
|
+
LINE 2: FROM ( VALUES(1), (2) )
|
132
|
+
^
|
133
|
+
HINT: For example, FROM (VALUES ...) [AS] foo.
|
134
|
+
ERR
|
135
|
+
|
136
|
+
|
137
|
+
# ERROR: VALUES in FROM must have an alias
|
138
|
+
# LINE 2: FROM ( VALUES(1), (2) )
|
139
|
+
# ^
|
140
|
+
# HINT: For example, FROM (VALUES ...) [AS] foo.
|
141
|
+
# SELECT err
|
142
|
+
# FROM ( VALUES(1), (2) )
|
143
|
+
# ^
|
144
|
+
# ORDER BY 1
|
145
|
+
|
146
|
+
```
|
147
|
+
|
148
|
+
## Customizing colors
|
149
|
+
If your console support more colors or different schemes, or if you prefer different colorization, then you can override ColorizeString methods.
|
150
|
+
Current colors were selected with dark and white console themes in mind, so a niceql colorization works good for dark, and good enough for white.
|
151
|
+
|
152
|
+
##
|
153
|
+
|
154
|
+
## Contributing
|
155
|
+
|
156
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/alekseyl/niceql.
|
157
|
+
|
158
|
+
## License
|
159
|
+
|
160
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "rails_sql_prettifier"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/err_now.png
ADDED
Binary file
|
data/err_was.png
ADDED
Binary file
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'benchmark/ips'
|
2
|
+
|
3
|
+
# 2 + 1 = 3 object
|
4
|
+
def slow_plus
|
5
|
+
'foo' + 'bar'
|
6
|
+
end
|
7
|
+
|
8
|
+
# 2 + 1 = 3 object
|
9
|
+
def slow_concat
|
10
|
+
'foo'.concat 'bar'
|
11
|
+
end
|
12
|
+
|
13
|
+
# 2 + 1 = 3 object
|
14
|
+
def slow_append
|
15
|
+
'foo' << 'bar'
|
16
|
+
end
|
17
|
+
|
18
|
+
# 1 object
|
19
|
+
def fast
|
20
|
+
'foo' 'bar'
|
21
|
+
end
|
22
|
+
|
23
|
+
def fast_interpolation
|
24
|
+
"#{'foo'}#{'bar'}"
|
25
|
+
end
|
26
|
+
|
27
|
+
Benchmark.ips do |x|
|
28
|
+
x.report('String#+') { slow_plus }
|
29
|
+
x.report('String#concat') { slow_concat }
|
30
|
+
x.report('String#append') { slow_append }
|
31
|
+
x.report('"foo" "bar"') { fast }
|
32
|
+
x.report('"#{\'foo\'}#{\'bar\'}"') { fast_interpolation }
|
33
|
+
x.compare!
|
34
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'benchmark/ips'
|
2
|
+
|
3
|
+
# 2 + 1 = 3 object
|
4
|
+
def slow_plus
|
5
|
+
'foo' + 'bar'
|
6
|
+
end
|
7
|
+
|
8
|
+
# 2 + 1 = 3 object
|
9
|
+
def slow_concat
|
10
|
+
'foo'.concat 'bar'
|
11
|
+
end
|
12
|
+
|
13
|
+
# 2 + 1 = 3 object
|
14
|
+
def slow_append
|
15
|
+
'foo' << 'bar'
|
16
|
+
end
|
17
|
+
|
18
|
+
# 1 object
|
19
|
+
def fast
|
20
|
+
'foo' 'bar'
|
21
|
+
end
|
22
|
+
|
23
|
+
def fast_interpolation
|
24
|
+
"#{'foo'}#{'bar'}"
|
25
|
+
end
|
26
|
+
|
27
|
+
Benchmark.ips do |x|
|
28
|
+
x.report('String#+') { slow_plus }
|
29
|
+
x.report('String#concat') { slow_concat }
|
30
|
+
x.report('String#append') { slow_append }
|
31
|
+
x.report('"foo" "bar"') { fast }
|
32
|
+
x.report('"#{\'foo\'}#{\'bar\'}"') { fast_interpolation }
|
33
|
+
x.compare!
|
34
|
+
end
|