pg_power 1.3.1 → 1.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.
@@ -16,6 +16,9 @@ ActiveRecord extension to get more from PostgreSQL:
16
16
 
17
17
  It was tested with Rails 3.1.x and 3.2.x, Ruby 1.8.7 REE and 1.9.3.
18
18
 
19
+ NOTE: JRuby is not yet supported. The current ActiveRecord JDBC
20
+ adapter has its own Rails4-compatible method named "create_schema" which
21
+ conflicts with this gem.
19
22
 
20
23
  ## Schemas
21
24
 
@@ -3,7 +3,7 @@ module ActiveRecord
3
3
  module SchemaStatements # :nodoc:
4
4
  # Regexp used to find the function name and function argument of a
5
5
  # function call
6
- FUNCTIONAL_INDEX_REGEXP = /(\w+)\((\w+)\)/
6
+ FUNCTIONAL_INDEX_REGEXP = /(\w+)\(((?:'.+'(?:::\w+)?, *)*)(\w+)\)/
7
7
 
8
8
  # Adds a new index to the table. +column_name+ can be a single Symbol, or
9
9
  # an Array of Symbols.
@@ -149,7 +149,7 @@ module ActiveRecord
149
149
  def quoted_columns_for_index(column_names, options = {})
150
150
  column_names.map do |name|
151
151
  if name =~ FUNCTIONAL_INDEX_REGEXP
152
- "#{$1}(#{quote_column_name($2)})"
152
+ "#{$1}(#{$2}#{quote_column_name($3)})"
153
153
  else
154
154
  quote_column_name(name)
155
155
  end
@@ -160,7 +160,7 @@ module ActiveRecord
160
160
  # Map an expression to a name appropriate for an index
161
161
  def expression_index_name(column_name)
162
162
  if column_name =~ FUNCTIONAL_INDEX_REGEXP
163
- "#{$1.downcase}_#{$2}"
163
+ "#{$1.downcase}_#{$3}"
164
164
  else
165
165
  column_name
166
166
  end
@@ -95,7 +95,7 @@ module ActiveRecord # :nodoc:
95
95
  if column_names.empty?
96
96
  definition = index[:definition].sub(INDEX_WHERE_EXPRESION, '')
97
97
  if column_expression = definition.match(INDEX_COLUMN_EXPRESSION)[1]
98
- column_names = column_expression.split(',').map do |functional_name|
98
+ column_names = split_expression(column_expression).map do |functional_name|
99
99
  remove_type(functional_name)
100
100
  end
101
101
  end
@@ -104,6 +104,33 @@ module ActiveRecord # :nodoc:
104
104
  column_names
105
105
  end
106
106
 
107
+ # Splits only on commas outside of parens
108
+ def split_expression(expression)
109
+ result = []
110
+ parens = 0
111
+ buffer = ""
112
+
113
+ expression.chars do |char|
114
+ case char
115
+ when ','
116
+ if parens == 0
117
+ result.push(buffer)
118
+ buffer = ""
119
+ next
120
+ end
121
+ when '('
122
+ parens += 1
123
+ when ')'
124
+ parens -= 1
125
+ end
126
+
127
+ buffer << char
128
+ end
129
+
130
+ result << buffer unless buffer.empty?
131
+ result
132
+ end
133
+
107
134
  # Find where statement from index definition
108
135
  #
109
136
  # @param [Hash] index index attributes
@@ -1,4 +1,4 @@
1
1
  module PgPower
2
2
  # Version of pg_power gem.
3
- VERSION = "1.3.1"
3
+ VERSION = "1.4.0"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_power
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-03-11 00:00:00.000000000 Z
15
+ date: 2013-05-01 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: pg
@@ -190,7 +190,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
190
  version: '0'
191
191
  segments:
192
192
  - 0
193
- hash: -2099156202754981641
193
+ hash: 509296341304110115
194
194
  required_rubygems_version: !ruby/object:Gem::Requirement
195
195
  none: false
196
196
  requirements:
@@ -199,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
199
  version: '0'
200
200
  requirements: []
201
201
  rubyforge_project:
202
- rubygems_version: 1.8.25
202
+ rubygems_version: 1.8.24
203
203
  signing_key:
204
204
  specification_version: 3
205
205
  summary: ActiveRecord extensions for PostgreSQL.