arel_toolkit 0.3.0 → 0.4.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 (99) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +3 -0
  3. data/.gitignore +4 -1
  4. data/.rubocop.yml +13 -5
  5. data/.travis.yml +7 -2
  6. data/Appraisals +9 -0
  7. data/CHANGELOG.md +19 -0
  8. data/Gemfile +5 -0
  9. data/Gemfile.lock +22 -5
  10. data/README.md +59 -18
  11. data/arel_toolkit.gemspec +5 -1
  12. data/gemfiles/.bundle/config +2 -0
  13. data/gemfiles/arel_gems.gemfile +10 -0
  14. data/gemfiles/arel_gems.gemfile.lock +274 -0
  15. data/gemfiles/default.gemfile +5 -0
  16. data/gemfiles/default.gemfile.lock +198 -0
  17. data/lib/arel/enhance.rb +16 -0
  18. data/lib/arel/enhance/context_enhancer/arel_table.rb +75 -0
  19. data/lib/arel/enhance/node.rb +189 -0
  20. data/lib/arel/enhance/path.rb +38 -0
  21. data/lib/arel/enhance/path_node.rb +26 -0
  22. data/lib/arel/enhance/query.rb +36 -0
  23. data/lib/arel/enhance/visitor.rb +81 -0
  24. data/lib/arel/extensions.rb +24 -4
  25. data/lib/arel/extensions/active_record_type_caster_map.rb +7 -0
  26. data/lib/arel/extensions/array.rb +2 -9
  27. data/lib/arel/extensions/at_time_zone.rb +10 -3
  28. data/lib/arel/extensions/binary.rb +7 -0
  29. data/lib/arel/extensions/bit_string.rb +2 -9
  30. data/lib/arel/extensions/case.rb +17 -0
  31. data/lib/arel/extensions/conflict.rb +9 -0
  32. data/lib/arel/extensions/contains.rb +27 -5
  33. data/lib/arel/extensions/current_catalog.rb +4 -0
  34. data/lib/arel/extensions/current_date.rb +4 -0
  35. data/lib/arel/extensions/current_of_expression.rb +2 -9
  36. data/lib/arel/extensions/current_role.rb +4 -0
  37. data/lib/arel/extensions/current_row.rb +7 -0
  38. data/lib/arel/extensions/current_schema.rb +4 -0
  39. data/lib/arel/extensions/current_user.rb +4 -0
  40. data/lib/arel/extensions/dealocate.rb +31 -0
  41. data/lib/arel/extensions/default_values.rb +4 -0
  42. data/lib/arel/extensions/delete_manager.rb +22 -6
  43. data/lib/arel/extensions/delete_statement.rb +26 -9
  44. data/lib/arel/extensions/dot.rb +11 -0
  45. data/lib/arel/extensions/extract_from.rb +3 -10
  46. data/lib/arel/extensions/factorial.rb +10 -2
  47. data/lib/arel/extensions/false.rb +7 -0
  48. data/lib/arel/extensions/function.rb +42 -13
  49. data/lib/arel/extensions/indirection.rb +3 -12
  50. data/lib/arel/extensions/infer.rb +6 -6
  51. data/lib/arel/extensions/infix_operation.rb +17 -0
  52. data/lib/arel/extensions/insert_manager.rb +19 -3
  53. data/lib/arel/extensions/insert_statement.rb +30 -11
  54. data/lib/arel/extensions/into.rb +21 -0
  55. data/lib/arel/extensions/named_argument.rb +3 -8
  56. data/lib/arel/extensions/named_function.rb +7 -0
  57. data/lib/arel/extensions/ordering.rb +21 -6
  58. data/lib/arel/extensions/overlaps.rb +9 -0
  59. data/lib/arel/extensions/overlay.rb +9 -0
  60. data/lib/arel/extensions/position.rb +3 -8
  61. data/lib/arel/extensions/prepare.rb +39 -0
  62. data/lib/arel/extensions/row.rb +3 -8
  63. data/lib/arel/extensions/select_core.rb +58 -0
  64. data/lib/arel/extensions/select_manager.rb +22 -6
  65. data/lib/arel/extensions/select_statement.rb +31 -9
  66. data/lib/arel/extensions/session_user.rb +4 -0
  67. data/lib/arel/extensions/set_to_default.rb +4 -0
  68. data/lib/arel/extensions/substring.rb +8 -0
  69. data/lib/arel/extensions/table.rb +43 -10
  70. data/lib/arel/extensions/time_with_precision.rb +6 -0
  71. data/lib/arel/extensions/to_sql.rb +27 -0
  72. data/lib/arel/extensions/transaction.rb +3 -8
  73. data/lib/arel/extensions/tree_manager.rb +10 -0
  74. data/lib/arel/extensions/trim.rb +8 -0
  75. data/lib/arel/extensions/true.rb +7 -0
  76. data/lib/arel/extensions/type_cast.rb +7 -0
  77. data/lib/arel/extensions/unary.rb +7 -0
  78. data/lib/arel/extensions/unary_operation.rb +16 -0
  79. data/lib/arel/extensions/unknown.rb +4 -0
  80. data/lib/arel/extensions/update_manager.rb +22 -6
  81. data/lib/arel/extensions/update_statement.rb +27 -10
  82. data/lib/arel/extensions/user.rb +4 -0
  83. data/lib/arel/extensions/values_list.rb +15 -0
  84. data/lib/arel/extensions/variable_set.rb +9 -0
  85. data/lib/arel/extensions/variable_show.rb +3 -8
  86. data/lib/arel/middleware/chain.rb +1 -5
  87. data/lib/arel/middleware/railtie.rb +10 -0
  88. data/lib/arel/sql_to_arel.rb +6 -3
  89. data/lib/arel/sql_to_arel/pg_query_visitor.rb +43 -15
  90. data/lib/arel/sql_to_arel/pg_query_visitor/frame_options.rb +1 -1
  91. data/lib/arel/sql_to_arel/result.rb +0 -4
  92. data/lib/arel/transformer.rb +7 -0
  93. data/lib/arel/transformer/add_schema_to_table.rb +26 -0
  94. data/lib/arel/transformer/remove_active_record_info.rb +42 -0
  95. data/lib/arel_toolkit.rb +8 -1
  96. data/lib/arel_toolkit/version.rb +1 -1
  97. metadata +81 -8
  98. data/lib/arel/extensions/unbound_column_reference.rb +0 -5
  99. data/lib/arel/sql_formatter.rb +0 -59
@@ -56,7 +56,7 @@ module Arel
56
56
  'FRAMEOPTION_START_VALUE_PRECEDING' => 0x00400,
57
57
  'FRAMEOPTION_END_VALUE_PRECEDING' => 0x00800,
58
58
  'FRAMEOPTION_START_VALUE_FOLLOWING' => 0x01000,
59
- 'FRAMEOPTION_END_VALUE_FOLLOWING' => 0x02000
59
+ 'FRAMEOPTION_END_VALUE_FOLLOWING' => 0x02000,
60
60
  }.freeze
61
61
 
62
62
  def biggest_detractable_number(number, candidates)
@@ -5,10 +5,6 @@ module Arel
5
5
  map(&:to_sql).join('; ')
6
6
  end
7
7
 
8
- def to_formatted_sql
9
- map(&:to_formatted_sql).join('; ')
10
- end
11
-
12
8
  def map(&block)
13
9
  Result.new super
14
10
  end
@@ -0,0 +1,7 @@
1
+ require_relative './transformer/add_schema_to_table'
2
+ require_relative './transformer/remove_active_record_info'
3
+
4
+ module Arel
5
+ module Transformer
6
+ end
7
+ end
@@ -0,0 +1,26 @@
1
+ module Arel
2
+ module Transformer
3
+ class AddSchemaToTable
4
+ attr_reader :schema_name
5
+
6
+ def initialize(schema_name)
7
+ @schema_name = schema_name
8
+ end
9
+
10
+ # https://github.com/mvgijssel/arel_toolkit/issues/110
11
+ def call(arel, _context)
12
+ tree = Arel.enhance(arel)
13
+
14
+ tree.query(
15
+ class: Arel::Table,
16
+ schema_name: nil,
17
+ context: { range_variable: true },
18
+ ).each do |node|
19
+ node['schema_name'].replace(schema_name)
20
+ end
21
+
22
+ tree.object
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,42 @@
1
+ module Arel
2
+ module Transformer
3
+ class RemoveActiveRecordInfo
4
+ class << self
5
+ def call(arel, _context)
6
+ tree = Arel.enhance(arel)
7
+
8
+ tree.query(class: Arel::Table).each do |node|
9
+ node['type_caster'].remove
10
+ end
11
+
12
+ tree.query(class: Arel::Nodes::BindParam).each do |node|
13
+ node.replace(
14
+ cast_for_database(node.object.value.value_for_database),
15
+ )
16
+ end
17
+
18
+ tree.object
19
+ end
20
+
21
+ private
22
+
23
+ def cast_for_database(value)
24
+ case value
25
+ when String
26
+ Arel::Nodes.build_quoted(value)
27
+ when Integer
28
+ value
29
+ when TrueClass
30
+ Arel::Nodes::TypeCast.new(Arel::Nodes::Quoted.new('t'), 'bool')
31
+ when FalseClass
32
+ Arel::Nodes::TypeCast.new(Arel::Nodes::Quoted.new('f'), 'bool')
33
+ when Float
34
+ value
35
+ else
36
+ raise "Unknown value cast `#{value}` with class `#{value.class}`"
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
data/lib/arel_toolkit.rb CHANGED
@@ -1,9 +1,16 @@
1
+ # Make sure the gems are loaded before ArelToolkit
2
+ require 'postgres_ext' if Gem.loaded_specs.key?('postgres_ext')
3
+ require 'active_record_upsert' if Gem.loaded_specs.key?('active_record_upsert')
4
+ require 'pg_search' if Gem.loaded_specs.key?('pg_search')
5
+ require 'rails/railtie' if Gem.loaded_specs.key?('railties')
6
+
1
7
  require 'arel_toolkit/version'
2
8
  require 'arel'
3
9
  require 'arel/extensions'
4
10
  require 'arel/sql_to_arel'
5
11
  require 'arel/middleware'
6
- require 'arel/sql_formatter'
12
+ require 'arel/enhance'
13
+ require 'arel/transformer'
7
14
 
8
15
  module ArelToolkit
9
16
  end
@@ -1,3 +1,3 @@
1
1
  module ArelToolkit
2
- VERSION = '0.3.0'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arel_toolkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - maarten
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-01 00:00:00.000000000 Z
11
+ date: 2019-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: arel
@@ -136,6 +136,34 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '3.8'
139
+ - !ruby/object:Gem::Dependency
140
+ name: approvals
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 0.0.24
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 0.0.24
153
+ - !ruby/object:Gem::Dependency
154
+ name: appraisal
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 2.2.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 2.2.0
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: database_cleaner
141
169
  requirement: !ruby/object:Gem::Requirement
@@ -182,16 +210,16 @@ dependencies:
182
210
  name: rubocop
183
211
  requirement: !ruby/object:Gem::Requirement
184
212
  requirements:
185
- - - "~>"
213
+ - - '='
186
214
  - !ruby/object:Gem::Version
187
- version: '0.69'
215
+ version: 0.71.0
188
216
  type: :development
189
217
  prerelease: false
190
218
  version_requirements: !ruby/object:Gem::Requirement
191
219
  requirements:
192
- - - "~>"
220
+ - - '='
193
221
  - !ruby/object:Gem::Version
194
- version: '0.69'
222
+ version: 0.71.0
195
223
  - !ruby/object:Gem::Dependency
196
224
  name: guard
197
225
  requirement: !ruby/object:Gem::Requirement
@@ -262,6 +290,20 @@ dependencies:
262
290
  - - ">="
263
291
  - !ruby/object:Gem::Version
264
292
  version: '0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: pry-doc
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :development
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
265
307
  - !ruby/object:Gem::Dependency
266
308
  name: pry-rescue
267
309
  requirement: !ruby/object:Gem::Requirement
@@ -320,6 +362,7 @@ files:
320
362
  - ".rubocop.yml"
321
363
  - ".ruby-version"
322
364
  - ".travis.yml"
365
+ - Appraisals
323
366
  - CHANGELOG.md
324
367
  - CODE_OF_CONDUCT.md
325
368
  - Gemfile
@@ -331,8 +374,21 @@ files:
331
374
  - arel_toolkit.gemspec
332
375
  - bin/console
333
376
  - bin/setup
377
+ - gemfiles/.bundle/config
378
+ - gemfiles/arel_gems.gemfile
379
+ - gemfiles/arel_gems.gemfile.lock
380
+ - gemfiles/default.gemfile
381
+ - gemfiles/default.gemfile.lock
382
+ - lib/arel/enhance.rb
383
+ - lib/arel/enhance/context_enhancer/arel_table.rb
384
+ - lib/arel/enhance/node.rb
385
+ - lib/arel/enhance/path.rb
386
+ - lib/arel/enhance/path_node.rb
387
+ - lib/arel/enhance/query.rb
388
+ - lib/arel/enhance/visitor.rb
334
389
  - lib/arel/extensions.rb
335
390
  - lib/arel/extensions/absolute.rb
391
+ - lib/arel/extensions/active_record_type_caster_map.rb
336
392
  - lib/arel/extensions/all.rb
337
393
  - lib/arel/extensions/any.rb
338
394
  - lib/arel/extensions/array.rb
@@ -340,8 +396,10 @@ files:
340
396
  - lib/arel/extensions/assignment.rb
341
397
  - lib/arel/extensions/at_time_zone.rb
342
398
  - lib/arel/extensions/between_symmetric.rb
399
+ - lib/arel/extensions/binary.rb
343
400
  - lib/arel/extensions/bit_string.rb
344
401
  - lib/arel/extensions/bitwise_xor.rb
402
+ - lib/arel/extensions/case.rb
345
403
  - lib/arel/extensions/coalesce.rb
346
404
  - lib/arel/extensions/conflict.rb
347
405
  - lib/arel/extensions/contained_by.rb
@@ -354,27 +412,33 @@ files:
354
412
  - lib/arel/extensions/current_date.rb
355
413
  - lib/arel/extensions/current_of_expression.rb
356
414
  - lib/arel/extensions/current_role.rb
415
+ - lib/arel/extensions/current_row.rb
357
416
  - lib/arel/extensions/current_schema.rb
358
417
  - lib/arel/extensions/current_time.rb
359
418
  - lib/arel/extensions/current_timestamp.rb
360
419
  - lib/arel/extensions/current_user.rb
420
+ - lib/arel/extensions/dealocate.rb
361
421
  - lib/arel/extensions/default_values.rb
362
422
  - lib/arel/extensions/delete_manager.rb
363
423
  - lib/arel/extensions/delete_statement.rb
364
424
  - lib/arel/extensions/distinct_from.rb
425
+ - lib/arel/extensions/dot.rb
365
426
  - lib/arel/extensions/equality.rb
366
427
  - lib/arel/extensions/except_all.rb
367
428
  - lib/arel/extensions/exponentiation.rb
368
429
  - lib/arel/extensions/extract_from.rb
369
430
  - lib/arel/extensions/factorial.rb
431
+ - lib/arel/extensions/false.rb
370
432
  - lib/arel/extensions/function.rb
371
433
  - lib/arel/extensions/generate_series.rb
372
434
  - lib/arel/extensions/greatest.rb
373
435
  - lib/arel/extensions/indirection.rb
374
436
  - lib/arel/extensions/infer.rb
437
+ - lib/arel/extensions/infix_operation.rb
375
438
  - lib/arel/extensions/insert_manager.rb
376
439
  - lib/arel/extensions/insert_statement.rb
377
440
  - lib/arel/extensions/intersect_all.rb
441
+ - lib/arel/extensions/into.rb
378
442
  - lib/arel/extensions/json_get_field.rb
379
443
  - lib/arel/extensions/json_get_object.rb
380
444
  - lib/arel/extensions/json_path_get_field.rb
@@ -401,9 +465,11 @@ files:
401
465
  - lib/arel/extensions/overlaps.rb
402
466
  - lib/arel/extensions/overlay.rb
403
467
  - lib/arel/extensions/position.rb
468
+ - lib/arel/extensions/prepare.rb
404
469
  - lib/arel/extensions/range_function.rb
405
470
  - lib/arel/extensions/rank.rb
406
471
  - lib/arel/extensions/row.rb
472
+ - lib/arel/extensions/select_core.rb
407
473
  - lib/arel/extensions/select_manager.rb
408
474
  - lib/arel/extensions/select_statement.rb
409
475
  - lib/arel/extensions/session_user.rb
@@ -413,14 +479,19 @@ files:
413
479
  - lib/arel/extensions/substring.rb
414
480
  - lib/arel/extensions/table.rb
415
481
  - lib/arel/extensions/time_with_precision.rb
482
+ - lib/arel/extensions/to_sql.rb
416
483
  - lib/arel/extensions/transaction.rb
484
+ - lib/arel/extensions/tree_manager.rb
417
485
  - lib/arel/extensions/trim.rb
486
+ - lib/arel/extensions/true.rb
418
487
  - lib/arel/extensions/type_cast.rb
419
- - lib/arel/extensions/unbound_column_reference.rb
488
+ - lib/arel/extensions/unary.rb
489
+ - lib/arel/extensions/unary_operation.rb
420
490
  - lib/arel/extensions/unknown.rb
421
491
  - lib/arel/extensions/update_manager.rb
422
492
  - lib/arel/extensions/update_statement.rb
423
493
  - lib/arel/extensions/user.rb
494
+ - lib/arel/extensions/values_list.rb
424
495
  - lib/arel/extensions/variable_set.rb
425
496
  - lib/arel/extensions/variable_show.rb
426
497
  - lib/arel/extensions/with_ordinality.rb
@@ -428,12 +499,14 @@ files:
428
499
  - lib/arel/middleware/chain.rb
429
500
  - lib/arel/middleware/postgresql_adapter.rb
430
501
  - lib/arel/middleware/railtie.rb
431
- - lib/arel/sql_formatter.rb
432
502
  - lib/arel/sql_to_arel.rb
433
503
  - lib/arel/sql_to_arel/error.rb
434
504
  - lib/arel/sql_to_arel/pg_query_visitor.rb
435
505
  - lib/arel/sql_to_arel/pg_query_visitor/frame_options.rb
436
506
  - lib/arel/sql_to_arel/result.rb
507
+ - lib/arel/transformer.rb
508
+ - lib/arel/transformer/add_schema_to_table.rb
509
+ - lib/arel/transformer/remove_active_record_info.rb
437
510
  - lib/arel_toolkit.rb
438
511
  - lib/arel_toolkit/version.rb
439
512
  homepage: https://github.com/mvgijssel/arel_toolkit
@@ -1,5 +0,0 @@
1
- module Arel
2
- module Nodes
3
- class UnboundColumnReference < ::Arel::Nodes::SqlLiteral; end
4
- end
5
- end
@@ -1,59 +0,0 @@
1
- module Arel
2
- module Nodes
3
- class Node
4
- def to_formatted_sql(engine = Table.engine)
5
- collector = Arel::Collectors::SQLString.new
6
- Arel::SqlFormatter.new(engine.connection).accept self, collector
7
- collector.value
8
- end
9
- end
10
- end
11
-
12
- class TreeManager
13
- def to_formatted_sql(engine = Table.engine)
14
- collector = Arel::Collectors::SQLString.new
15
- Arel::SqlFormatter.new(engine.connection).accept @ast, collector
16
- collector.value
17
- end
18
- end
19
-
20
- class SqlFormatter < Arel::Visitors::PostgreSQL
21
- def accept(object, collector)
22
- super object, collector
23
- collector << "\n"
24
- end
25
-
26
- private
27
-
28
- # rubocop:disable Naming/MethodName
29
- # rubocop:disable Naming/UncommunicativeMethodParamName
30
- # rubocop:disable Metrics/AbcSize
31
- def visit_Arel_Nodes_SelectCore(o, collector)
32
- collector << "SELECT\n"
33
-
34
- collector = maybe_visit o.top, collector
35
-
36
- collector = maybe_visit o.set_quantifier, collector
37
-
38
- collect_nodes_for(o.projections, collector, SPACE, ",\n")
39
-
40
- if o.source && !o.source.empty?
41
- collector << ' FROM '
42
- collector = visit o.source, collector
43
- end
44
-
45
- collect_nodes_for o.wheres, collector, WHERE, AND
46
- collect_nodes_for o.groups, collector, GROUP_BY
47
- unless o.havings.empty?
48
- collector << ' HAVING '
49
- inject_join o.havings, collector, AND
50
- end
51
- collect_nodes_for o.windows, collector, WINDOW
52
-
53
- collector
54
- end
55
- # rubocop:enable Metrics/AbcSize
56
- # rubocop:enable Naming/MethodName
57
- # rubocop:enable Naming/UncommunicativeMethodParamName
58
- end
59
- end