pg_query 0.11.5 → 0.12.0

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: 6bfd32c9b29042f52d66ca4bd5786a5e4ca36a47
4
- data.tar.gz: f908506157865a90c0612f2fbde3a94b83cfd33e
3
+ metadata.gz: 61359adbe400bc68cb1dc1d922483daf361eb143
4
+ data.tar.gz: b9af1134fffbcb19935c16ee0ce9c3571a27d6ce
5
5
  SHA512:
6
- metadata.gz: 3c3da7f705f3fedd8413abdb45fe136b5618fb5e3096396f2cebe3210ae4d33100591a3c5106dce88b6ac1ee518e219a7c32440feaf21b48fee919a6afb065d7
7
- data.tar.gz: 4305e63f41e304194434317457e032ca9d258dc2fb43b7dd7379622edae9c60ead3ca58fbeb7ca8155ca51ea060443847ce971047eff3fc4a9f29a2f401469cf
6
+ metadata.gz: fe42b2f8e3ccf33bbebca91340f9f1cc22439064a7ada8b8d3fac2ad8ea7e22f3d4ced2afd27c35b730a835b2b18b798c0e12e66a0a246edcd4fe04e661690cf
7
+ data.tar.gz: 12b4a53a3496c59ff0f275fc6a6e6829035593d360f098ecebf5d276aeb9324360d0f11dd3a836fa80eaa38b8822fa37ea54462b1df54d48204481305dea0b22
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.12.0 2017-07-29
4
+
5
+ * Update libpg_query to 9.5-1.6.0
6
+ * BREAKING CHANGE in PgQuery.normalize(..) output
7
+ * This matches the change in the upcoming Postgres 10, and makes it easier to
8
+ migrate applications to the new normalization format using $1..$N instead of ?
9
+
10
+
3
11
  ## 0.11.5 2017-07-09
4
12
 
5
13
  * Deparse coldeflist [#64](https://github.com/lfittl/pg_query/pull/64) [@jcsjcs](https://github.com/jcsjcs)
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ RuboCop::RakeTask.new
12
12
 
13
13
  task spec: :compile
14
14
 
15
- task default: [:lint, :spec]
15
+ task default: %i[lint spec]
16
16
  task test: :spec
17
17
  task lint: :rubocop
18
18
 
@@ -3,7 +3,7 @@
3
3
  require 'mkmf'
4
4
  require 'open-uri'
5
5
 
6
- LIB_PG_QUERY_TAG = '9.5-1.4.2'
6
+ LIB_PG_QUERY_TAG = '9.5-1.6.0'.freeze
7
7
 
8
8
  workdir = Dir.pwd
9
9
  libdir = File.join(workdir, 'libpg_query-' + LIB_PG_QUERY_TAG)
@@ -19,7 +19,7 @@ unless File.exist?("#{workdir}/libpg_query.tar.gz")
19
19
  end
20
20
 
21
21
  unless Dir.exist?(libdir)
22
- system("tar -xf #{workdir}/libpg_query.tar.gz") || fail('ERROR')
22
+ system("tar -xf #{workdir}/libpg_query.tar.gz") || raise('ERROR')
23
23
  end
24
24
 
25
25
  unless Dir.exist?(libfile)
@@ -43,7 +43,7 @@ class PgQuery
43
43
  when AEXPR_NULLIF
44
44
  deparse_aexpr_nullif(node)
45
45
  else
46
- fail format("Can't deparse: %s: %s", type, node.inspect)
46
+ raise format("Can't deparse: %s: %s", type, node.inspect)
47
47
  end
48
48
  when ALIAS
49
49
  deparse_alias(node)
@@ -161,7 +161,7 @@ class PgQuery
161
161
  when NULL
162
162
  'NULL'
163
163
  else
164
- fail format("Can't deparse: %s: %s", type, node.inspect)
164
+ raise format("Can't deparse: %s: %s", type, node.inspect)
165
165
  end
166
166
  end
167
167
 
@@ -171,7 +171,10 @@ class PgQuery
171
171
 
172
172
  def deparse_rangevar(node)
173
173
  output = []
174
- output << 'ONLY' if node['inhOpt'] == 0
174
+ case node['inhOpt']
175
+ when 0
176
+ output << 'ONLY'
177
+ end
175
178
  output << '"' + node['relname'] + '"'
176
179
  output << deparse_item(node['alias']) if node['alias']
177
180
  output.join(' ')
@@ -180,13 +183,14 @@ class PgQuery
180
183
  def deparse_renamestmt(node)
181
184
  output = []
182
185
 
183
- if node['renameType'] == OBJECT_TYPE_TABLE
186
+ case node['renameType']
187
+ when OBJECT_TYPE_TABLE
184
188
  output << 'ALTER TABLE'
185
189
  output << deparse_item(node['relation'])
186
190
  output << 'RENAME TO'
187
191
  output << node['newname']
188
192
  else
189
- fail format("Can't deparse: %s", node.inspect)
193
+ raise format("Can't deparse: %s", node.inspect)
190
194
  end
191
195
 
192
196
  output.join(' ')
@@ -276,7 +280,7 @@ class PgQuery
276
280
  elsif node['val'].nil?
277
281
  node['name']
278
282
  else
279
- fail format("Can't deparse %s in context %s", node.inspect, context)
283
+ raise format("Can't deparse %s in context %s", node.inspect, context)
280
284
  end
281
285
  end
282
286
 
@@ -423,8 +427,12 @@ class PgQuery
423
427
  def deparse_joinexpr(node)
424
428
  output = []
425
429
  output << deparse_item(node['larg'])
426
- output << 'LEFT' if node['jointype'] == 1
427
- output << 'CROSS' if node['jointype'] == 0 && node['quals'].nil?
430
+ case node['jointype']
431
+ when 0
432
+ output << 'CROSS' if node['quals'].nil?
433
+ when 1
434
+ output << 'LEFT'
435
+ end
428
436
  output << 'JOIN'
429
437
  output << deparse_item(node['rarg'])
430
438
 
@@ -441,7 +449,7 @@ class PgQuery
441
449
  LCS_FORSHARE => 'FOR SHARE',
442
450
  LCS_FORNOKEYUPDATE => 'FOR NO KEY UPDATE',
443
451
  LCS_FORUPDATE => 'FOR UPDATE'
444
- }
452
+ }.freeze
445
453
  def deparse_lockingclause(node)
446
454
  output = []
447
455
  output << LOCK_CLAUSE_STRENGTH[node['strength']]
@@ -632,11 +640,11 @@ class PgQuery
632
640
 
633
641
  def deparse_sublink(node)
634
642
  if node['subLinkType'] == SUBLINK_TYPE_ANY
635
- return format('%s IN (%s)', deparse_item(node['testexpr']), deparse_item(node['subselect']))
643
+ format('%s IN (%s)', deparse_item(node['testexpr']), deparse_item(node['subselect']))
636
644
  elsif node['subLinkType'] == SUBLINK_TYPE_EXISTS
637
- return format('EXISTS(%s)', deparse_item(node['subselect']))
645
+ format('EXISTS(%s)', deparse_item(node['subselect']))
638
646
  else
639
- return format('(%s)', deparse_item(node['subselect']))
647
+ format('(%s)', deparse_item(node['subselect']))
640
648
  end
641
649
  end
642
650
 
@@ -791,7 +799,7 @@ class PgQuery
791
799
 
792
800
  # Intervals are tricky and should be handled in a separate method because
793
801
  # they require performing some bitmask operations.
794
- return deparse_interval_type(node) if names == %w(pg_catalog interval)
802
+ return deparse_interval_type(node) if names == %w[pg_catalog interval]
795
803
 
796
804
  output = []
797
805
  output << 'SETOF' if node['setof']
@@ -844,7 +852,7 @@ class PgQuery
844
852
  when 'timestamptz'
845
853
  'timestamp with time zone'
846
854
  else
847
- fail format("Can't deparse type: %s", type)
855
+ raise format("Can't deparse type: %s", type)
848
856
  end
849
857
  end
850
858
 
@@ -870,9 +878,10 @@ class PgQuery
870
878
 
871
879
  def deparse_nulltest(node)
872
880
  output = [deparse_item(node['arg'])]
873
- if node['nulltesttype'] == 0
881
+ case node['nulltesttype']
882
+ when 0
874
883
  output << 'IS NULL'
875
- elsif node['nulltesttype'] == 1
884
+ when 1
876
885
  output << 'IS NOT NULL'
877
886
  end
878
887
  output.join(' ')
@@ -885,10 +894,10 @@ class PgQuery
885
894
  TRANS_STMT_SAVEPOINT => 'SAVEPOINT',
886
895
  TRANS_STMT_RELEASE => 'RELEASE',
887
896
  TRANS_STMT_ROLLBACK_TO => 'ROLLBACK TO SAVEPOINT'
888
- }
897
+ }.freeze
889
898
  def deparse_transaction(node)
890
899
  output = []
891
- output << TRANSACTION_CMDS[node['kind']] || fail(format("Can't deparse TRANSACTION %s", node.inspect))
900
+ output << TRANSACTION_CMDS[node['kind']] || raise(format("Can't deparse TRANSACTION %s", node.inspect))
892
901
 
893
902
  if node['options']
894
903
  output += node['options'].map { |item| deparse_item(item) }
@@ -15,7 +15,7 @@ class PgQuery
15
15
  # ALTER COLUMN {column_name} DROP NOT NULL
16
16
  #
17
17
  def self.commands(node)
18
- action = ALTER_TABLE_TYPES_MAPPING[node['subtype']] || fail(format("Can't deparse: %s", node.inspect))
18
+ action = ALTER_TABLE_TYPES_MAPPING[node['subtype']] || raise(format("Can't deparse: %s", node.inspect))
19
19
  PgQuery::Deparse.instance_exec(node, &action)
20
20
  end
21
21
 
@@ -57,7 +57,7 @@ class PgQuery
57
57
  26 => 'CENTURY',
58
58
  27 => 'MILLENNIUM',
59
59
  28 => 'DTZMOD'
60
- }
60
+ }.freeze
61
61
  KEYS = MASKS.invert
62
62
 
63
63
  # Postgres stores the interval 'day second' as 'day hour minute second' so
@@ -75,31 +75,31 @@ class PgQuery
75
75
  # { 6 => 'year to month' }
76
76
  #
77
77
  SQL_BY_MASK = {
78
- (1 << KEYS['YEAR']) => %w(year),
79
- (1 << KEYS['MONTH']) => %w(month),
80
- (1 << KEYS['DAY']) => %w(day),
81
- (1 << KEYS['HOUR']) => %w(hour),
82
- (1 << KEYS['MINUTE']) => %w(minute),
83
- (1 << KEYS['SECOND']) => %w(second),
78
+ (1 << KEYS['YEAR']) => %w[year],
79
+ (1 << KEYS['MONTH']) => %w[month],
80
+ (1 << KEYS['DAY']) => %w[day],
81
+ (1 << KEYS['HOUR']) => %w[hour],
82
+ (1 << KEYS['MINUTE']) => %w[minute],
83
+ (1 << KEYS['SECOND']) => %w[second],
84
84
  (1 << KEYS['YEAR'] |
85
- 1 << KEYS['MONTH']) => %w(year month),
85
+ 1 << KEYS['MONTH']) => %w[year month],
86
86
  (1 << KEYS['DAY'] |
87
- 1 << KEYS['HOUR']) => %w(day hour),
87
+ 1 << KEYS['HOUR']) => %w[day hour],
88
88
  (1 << KEYS['DAY'] |
89
89
  1 << KEYS['HOUR'] |
90
- 1 << KEYS['MINUTE']) => %w(day minute),
90
+ 1 << KEYS['MINUTE']) => %w[day minute],
91
91
  (1 << KEYS['DAY'] |
92
92
  1 << KEYS['HOUR'] |
93
93
  1 << KEYS['MINUTE'] |
94
- 1 << KEYS['SECOND']) => %w(day second),
94
+ 1 << KEYS['SECOND']) => %w[day second],
95
95
  (1 << KEYS['HOUR'] |
96
- 1 << KEYS['MINUTE']) => %w(hour minute),
96
+ 1 << KEYS['MINUTE']) => %w[hour minute],
97
97
  (1 << KEYS['HOUR'] |
98
98
  1 << KEYS['MINUTE'] |
99
- 1 << KEYS['SECOND']) => %w(hour second),
99
+ 1 << KEYS['SECOND']) => %w[hour second],
100
100
  (1 << KEYS['MINUTE'] |
101
- 1 << KEYS['SECOND']) => %w(minute second)
102
- }
101
+ 1 << KEYS['SECOND']) => %w[minute second]
102
+ }.freeze
103
103
  end
104
104
  end
105
105
  end
@@ -14,7 +14,8 @@ class PgQuery
14
14
  statement = statements.shift
15
15
  if statement
16
16
  if statement[SELECT_STMT]
17
- if statement[SELECT_STMT]['op'] == 0
17
+ case statement[SELECT_STMT]['op']
18
+ when 0
18
19
  if statement[SELECT_STMT][FROM_CLAUSE_FIELD]
19
20
  # FROM subselects
20
21
  statement[SELECT_STMT][FROM_CLAUSE_FIELD].each do |item|
@@ -35,7 +36,7 @@ class PgQuery
35
36
  statements << item['CommonTableExpr']['ctequery'] if item['CommonTableExpr']
36
37
  end
37
38
  end
38
- elsif statement[SELECT_STMT]['op'] == 1
39
+ when 1
39
40
  statements << statement[SELECT_STMT]['larg'] if statement[SELECT_STMT]['larg']
40
41
  statements << statement[SELECT_STMT]['rarg'] if statement[SELECT_STMT]['rarg']
41
42
  end
@@ -50,7 +51,7 @@ class PgQuery
50
51
  next_item = condition_items.shift
51
52
  if next_item
52
53
  if next_item[A_EXPR]
53
- %w(lexpr rexpr).each do |side|
54
+ %w[lexpr rexpr].each do |side|
54
55
  expr = next_item.values[0][side]
55
56
  next unless expr && expr.is_a?(Hash)
56
57
  condition_items << expr
@@ -93,7 +94,7 @@ class PgQuery
93
94
  next_item = joinexpr_items.shift
94
95
  break unless next_item
95
96
  condition_items << next_item['quals'] if next_item['quals']
96
- %w(larg rarg).each do |side|
97
+ %w[larg rarg].each do |side|
97
98
  next unless next_item[side][JOIN_EXPR]
98
99
  joinexpr_items << next_item[side][JOIN_EXPR]
99
100
  end
@@ -36,7 +36,7 @@ class PgQuery
36
36
  private
37
37
 
38
38
  def param_ref_length(paramref_node)
39
- if paramref_node['number'] == 0
39
+ if paramref_node['number'] == 0 # rubocop:disable Style/NumericPredicate
40
40
  1 # Actually a ? replacement character
41
41
  else
42
42
  ('$' + paramref_node['number'].to_s).size
@@ -60,7 +60,8 @@ class PgQuery
60
60
  if statement
61
61
  case statement.keys[0]
62
62
  when SELECT_STMT
63
- if statement[SELECT_STMT]['op'] == 0
63
+ case statement[SELECT_STMT]['op']
64
+ when 0
64
65
  (statement[SELECT_STMT][FROM_CLAUSE_FIELD] || []).each do |item|
65
66
  if item[RANGE_SUBSELECT]
66
67
  statements << item[RANGE_SUBSELECT]['subquery']
@@ -78,7 +79,7 @@ class PgQuery
78
79
  statements << item[COMMON_TABLE_EXPR]['ctequery']
79
80
  end
80
81
  end
81
- elsif statement[SELECT_STMT]['op'] == 1
82
+ when 1
82
83
  statements << statement[SELECT_STMT]['larg'] if statement[SELECT_STMT]['larg']
83
84
  statements << statement[SELECT_STMT]['rarg'] if statement[SELECT_STMT]['rarg']
84
85
  end
@@ -100,11 +101,11 @@ class PgQuery
100
101
  when GRANT_STMT
101
102
  objects = statement[GRANT_STMT]['objects']
102
103
  case statement[GRANT_STMT]['objtype']
103
- when 0 # Column
104
+ when 0 # Column # rubocop:disable Lint/EmptyWhen
104
105
  # FIXME
105
106
  when 1 # Table
106
107
  from_clause_items += objects
107
- when 2 # Sequence
108
+ when 2 # Sequence # rubocop:disable Lint/EmptyWhen
108
109
  # FIXME
109
110
  end
110
111
  when DROP_STMT
@@ -131,7 +132,7 @@ class PgQuery
131
132
  if next_item
132
133
  case next_item.keys[0]
133
134
  when A_EXPR
134
- %w(lexpr rexpr).each do |side|
135
+ %w[lexpr rexpr].each do |side|
135
136
  elem = next_item.values[0][side]
136
137
  next unless elem
137
138
  if elem.is_a?(Array)
@@ -158,7 +159,7 @@ class PgQuery
158
159
 
159
160
  case next_item.keys[0]
160
161
  when JOIN_EXPR
161
- %w(larg rarg).each do |side|
162
+ %w[larg rarg].each do |side|
162
163
  from_clause_items << next_item[JOIN_EXPR][side]
163
164
  end
164
165
  when ROW_EXPR
@@ -1,7 +1,7 @@
1
1
  class PgQuery
2
2
  private
3
3
 
4
- def treewalker!(normalized_parsetree, &block)
4
+ def treewalker!(normalized_parsetree)
5
5
  exprs = normalized_parsetree.dup.map { |e| [e, []] }
6
6
 
7
7
  loop do
@@ -11,7 +11,7 @@ class PgQuery
11
11
  expr.each do |k, v|
12
12
  location = parent_location + [k]
13
13
 
14
- block.call(expr, k, v, location)
14
+ yield(expr, k, v, location)
15
15
 
16
16
  exprs << [v, location] unless v.nil?
17
17
  end
@@ -23,14 +23,14 @@ class PgQuery
23
23
  end
24
24
  end
25
25
 
26
- def find_tree_location(normalized_parsetree, searched_location, &block)
26
+ def find_tree_location(normalized_parsetree, searched_location)
27
27
  treewalker! normalized_parsetree do |expr, k, v, location|
28
28
  next unless location == searched_location
29
- block.call(expr, k, v)
29
+ yield(expr, k, v)
30
30
  end
31
31
  end
32
32
 
33
- def transform_nodes!(parsetree, &block)
33
+ def transform_nodes!(parsetree)
34
34
  result = deep_dup(parsetree)
35
35
  exprs = result.dup
36
36
 
@@ -38,7 +38,7 @@ class PgQuery
38
38
  expr = exprs.shift
39
39
 
40
40
  if expr.is_a?(Hash)
41
- block.call(expr) if expr.size == 1 && expr.keys[0][/^[A-Z]+/]
41
+ yield(expr) if expr.size == 1 && expr.keys[0][/^[A-Z]+/]
42
42
 
43
43
  exprs += expr.values.compact
44
44
  elsif expr.is_a?(Array)
@@ -41,7 +41,7 @@ class PgQuery
41
41
  treewalker! @tree do |_expr, k, v, location|
42
42
  case k
43
43
  when TARGET_LIST_FIELD
44
- length = deparse([{ SELECT_STMT => { k => v } }]).size - 'SELECT '.size
44
+ length = deparse([{ SELECT_STMT => { k => v } }]).size - 7 # 'SELECT '.size
45
45
 
46
46
  truncations << PossibleTruncation.new(location, TARGET_LIST_FIELD, length, true)
47
47
  when 'whereClause'
@@ -1,3 +1,3 @@
1
1
  class PgQuery
2
- VERSION = '0.11.5'
2
+ VERSION = '0.12.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.5
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Fittl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-10 00:00:00.000000000 Z
11
+ date: 2017-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -42,30 +42,30 @@ dependencies:
42
42
  name: rubocop
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 0.49.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 0.49.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rubocop-rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 1.15.1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 1.15.1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: json
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -142,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
142
  version: '0'
143
143
  requirements: []
144
144
  rubyforge_project:
145
- rubygems_version: 2.4.5.1
145
+ rubygems_version: 2.6.11
146
146
  signing_key:
147
147
  specification_version: 4
148
148
  summary: PostgreSQL query parsing and normalization library