activerecord-advantage-adapter 0.1.2 → 0.1.4

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
  SHA256:
3
- metadata.gz: 4f45753b6d821481bef646fe79203244d7b69c726b9fe82229e8b312b946c65b
4
- data.tar.gz: 737097d811c4f196d6a8a4136d17d9b218f6a7294ebf550f78cd22d88ad6edfa
3
+ metadata.gz: b0b104f4e9d8fb204bc6249aa06448f5881292745123dd94c2def2eee9254dad
4
+ data.tar.gz: 3e64e4089e520711b10ca37cb3b3404834c2b939d65a50898e19d1735c4f3d50
5
5
  SHA512:
6
- metadata.gz: 01f7b781263c979760673854136779bf9a118ab37490ec1b1ed4d77a4e6f98aa0fdc9c78f5cb09cc87eb2a13acbc1f25f2479639f987c73a16ac120a7b03b430
7
- data.tar.gz: 054a2d014d38699df8f6b5baa585e8c787632e3b53120ffe2ef98fc3816d8bbe368750eff8c4d461c79dee302db7f2647a293797bc2cd2ea60039353a3954e9a
6
+ metadata.gz: 6f100c25e14250e25e93ecadfe20f1bbe2c5ee1e42d3980924771111cc7ac5a094a3ab2f2db057bbd2ac8630ca195e15a60892fbc8dd47eb90ef2f4c8c324204
7
+ data.tar.gz: 3ecae6463a95d48e9e1f9ef194fe8adde8333e39c74f9d90d405fd63acc64a59cbdcfb91b0fdea786ce1dca00f5dff93c142dbfaf8fef62a4465a8af65fae4bc
@@ -1,7 +1,7 @@
1
1
  lib = File.expand_path("../lib", __FILE__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
- pkg_version = "0.1.2"
4
+ pkg_version = "0.1.4"
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "activerecord-advantage-adapter"
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.metadata["homepage_uri"] = spec.homepage
23
23
  # Changed to the github project, as this is the actively maintained source, now.
24
24
  spec.metadata["source_code_uri"] = "https://github.com/t12nslookup/activerecord-advantage-adapter/"
25
- spec.metadata["changelog_uri"] = "https://github.com/t12nslookup/activerecord-advantage-adapter/blob/master/CHANGELOG.md"
25
+ spec.metadata["changelog_uri"] = "https://github.com/t12nslookup/activerecord-advantage-adapter/CHANGELOG.md"
26
26
  else
27
27
  raise "RubyGems 2.0 or newer is required to protect against " \
28
28
  "public gem pushes."
@@ -78,6 +78,7 @@ module ActiveRecord
78
78
  private
79
79
 
80
80
  # Overridden to handle Advantage integer, varchar, binary, and timestamp types
81
+ # Rails 4 does not use this.
81
82
  def simplified_type(field_type)
82
83
  case field_type
83
84
  when /logical/i
@@ -94,16 +95,6 @@ module ActiveRecord
94
95
  super
95
96
  end
96
97
  end
97
-
98
- # JAD Is this helpful?
99
- def initialize_type_map(m = type_map)
100
- m.alias_type %r(memo)i, "char"
101
- m.alias_type %r(long binary)i, "binary"
102
- m.alias_type %r(integer)i, "int"
103
- m.alias_type %r(short)i, "int"
104
- m.alias_type %r(autoinc)i, "int"
105
- super
106
- end
107
98
  end
108
99
 
109
100
  class AdvantageAdapter < AbstractAdapter
@@ -118,7 +109,7 @@ module ActiveRecord
118
109
  end
119
110
 
120
111
  def adapter_name #:nodoc:
121
- "Advantage"
112
+ 'Advantage'
122
113
  end
123
114
 
124
115
  def supports_migrations? #:nodoc:
@@ -130,13 +121,13 @@ module ActiveRecord
130
121
  end
131
122
 
132
123
  def active? #:nodoc:
133
- ADS.instance.api.ads_execute_immediate(@connection, "SELECT 1 FROM SYSTEM.IOTA") == 1
134
- rescue
124
+ ADS.instance.api.ads_execute_immediate(@connection, 'SELECT 1 FROM SYSTEM.IOTA') == 1
125
+ rescue StandardError
135
126
  false
136
127
  end
137
128
 
138
129
  def disconnect! #:nodoc:
139
- result = ADS.instance.api.ads_disconnect(@connection)
130
+ _result = ADS.instance.api.ads_disconnect(@connection)
140
131
  super
141
132
  end
142
133
 
@@ -180,20 +171,21 @@ module ActiveRecord
180
171
 
181
172
  # Applies quotations around column names in generated queries
182
173
  def quote_column_name(name) #:nodoc:
183
- %Q("#{name}")
174
+ %("#{name}")
184
175
  end
185
176
 
186
177
  def quoted_true #:nodoc:
187
- "1"
178
+ '1'
188
179
  end
189
180
 
190
181
  def quoted_false #:nodoc:
191
- "0"
182
+ '0'
192
183
  end
193
184
 
194
185
  # Translate the exception if possible
195
186
  def translate_exception(exception, message) #:nodoc:
196
187
  return super unless exception.respond_to?(:errno)
188
+
197
189
  case exception.errno
198
190
  when 2121
199
191
  if exception.sql !~ /^SELECT/i
@@ -214,13 +206,13 @@ module ActiveRecord
214
206
  # The database update function.
215
207
  def update_sql(sql, name = nil) #:nodoc:
216
208
  execute(sql, name)
217
- return @affected_rows
209
+ @affected_rows
218
210
  end
219
211
 
220
212
  # The database delete function.
221
213
  def delete_sql(sql, name = nil) #:nodoc:
222
214
  execute(sql, name)
223
- return @affected_rows
215
+ @affected_rows
224
216
  end
225
217
 
226
218
  # The database insert function.
@@ -228,37 +220,38 @@ module ActiveRecord
228
220
  # by immediatly querying the @@identity property. If the @@identity property is 0, then passed id_value is used
229
221
  def insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) #:nodoc:
230
222
  execute(sql, name)
231
- identity = last_inserted_id(nil)
223
+ _identity = last_inserted_id(nil)
232
224
  retval = id_value if retval == 0
233
- return retval
225
+ retval
234
226
  end
235
227
 
236
228
  # The Database insert function as part of the rails changes
237
- def exec_insert(sql, name = nil, binds = [], pk = nil, sequence_name = nil) #:nodoc:
238
- log(sql, "insert", binds) { exec_query(sql, binds) }
229
+ def exec_insert(sql, _name = nil, binds = [], _pk = nil, _sequence_name = nil) #:nodoc:
230
+ log(sql, 'insert', binds) { exec_query(sql, binds) }
239
231
  end
240
232
 
241
233
  # The Database update function as part of the rails changes
242
- def exec_update(sql, name = nil, binds = []) #:nodoc:
243
- log(sql, "update", binds) { exec_query(sql, binds) }
234
+ def exec_update(sql, _name = nil, binds = []) #:nodoc:
235
+ log(sql, 'update', binds) { exec_query(sql, binds) }
244
236
  end
245
237
 
246
238
  # The Database delete function as part of the rails changes
247
- def exec_delete(sql, name = nil, binds = []) #:nodoc:
248
- log(sql, "delete", binds) { exec_query(sql, binds) }
239
+ def exec_delete(sql, _name = nil, binds = []) #:nodoc:
240
+ log(sql, 'delete', binds) { exec_query(sql, binds) }
249
241
  end
250
242
 
251
- def exec_query(sql, name = "SQL", binds = [])
243
+ def exec_query(sql, name = "SQL", _binds = [])
252
244
  cols, record = execute(sql, name)
253
245
  ActiveRecord::Result.new(cols, record)
254
246
  end
255
247
 
256
248
  # Retrieve the last AutoInc ID
257
- def last_inserted_id(result) #:nodoc:
258
- rs = ADS.instance.api.ads_execute_direct(@connection, "SELECT LASTAUTOINC( CONNECTION ) FROM SYSTEM.IOTA")
249
+ def last_inserted_id(_result) #:nodoc:
250
+ rs = ADS.instance.api.ads_execute_direct(@connection, 'SELECT LASTAUTOINC( CONNECTION ) FROM SYSTEM.IOTA')
259
251
  raise ActiveRecord::StatementInvalid.new("#{ADS.instance.api.ads_error(@connection)}:#{sql}") if rs.nil?
252
+
260
253
  ADS.instance.api.ads_fetch_next(rs)
261
- retval, identity = ADS.instance.api.ads_get_column(rs, 0)
254
+ _retval, identity = ADS.instance.api.ads_get_column(rs, 0)
262
255
  ADS.instance.api.ads_free_stmt(rs)
263
256
  identity
264
257
  end
@@ -292,10 +285,10 @@ module ActiveRecord
292
285
 
293
286
  # Advantage does not support sizing of integers based on the sytax INTEGER(size).
294
287
  def type_to_sql(type, limit = nil, precision = nil, scale = nil) #:nodoc:
295
- if native = native_database_types[type]
288
+ if native_database_types[type]
296
289
  if type == :integer
297
- column_type_sql = "integer"
298
- elsif type == :string and !limit.nil?
290
+ 'integer'
291
+ elsif type == :string && !limit.nil?
299
292
  "varchar (#{limit})"
300
293
  else
301
294
  super(type, limit, precision, scale)
@@ -306,35 +299,35 @@ module ActiveRecord
306
299
  end
307
300
 
308
301
  # Retrieve a list of Tables
309
- def data_source_sql(name = nil, type = nil) #:nodoc:
302
+ def data_source_sql(name = nil, _type = nil) #:nodoc:
310
303
  "SELECT table_name from (EXECUTE PROCEDURE sp_GetTables( NULL, NULL, '#{name}', 'TABLE' )) spgc where table_cat <> 'system';"
311
304
  end
312
305
 
313
306
  # Retrieve a list of Tables
314
307
  def tables(name = nil) #:nodoc:
315
308
  sql = "EXECUTE PROCEDURE sp_GetTables( NULL, NULL, NULL, 'TABLE' );"
316
- select(sql, name).map { |row| strip_or_self(row["TABLE_NAME"]) }
309
+ select(sql, name).map { |row| strip_or_self(row['TABLE_NAME']) }
317
310
  end
318
311
 
319
312
  # Return a list of columns
320
- def columns(table_name, name = nil) #:nodoc:
313
+ def columns(table_name, _name = nil) #:nodoc:
321
314
  table_structure(table_name).map do |field|
322
315
  if Rails::VERSION::MAJOR > 4
323
- AdvantageColumn.new(strip_or_self(field["COLUMN_NAME"]),
324
- field["COLUMN_DEF"],
325
- SqlTypeMetadata.new(sql_type: strip_or_self(field["TYPE_NAME"])),
326
- field["NULLABLE"])
316
+ AdvantageColumn.new(strip_or_self(field['COLUMN_NAME']),
317
+ field['COLUMN_DEF'],
318
+ fetch_type_metadata(strip_or_self(field['TYPE_NAME'])),
319
+ field['NULLABLE'])
327
320
  elsif Rails::VERSION::MAJOR == 4
328
- AdvantageColumn.new(strip_or_self(field["COLUMN_NAME"]),
329
- field["COLUMN_DEF"],
330
- lookup_cast_type(strip_or_self(field["TYPE_NAME"])),
331
- strip_or_self(field["TYPE_NAME"]),
332
- field["NULLABLE"])
321
+ AdvantageColumn.new(strip_or_self(field['COLUMN_NAME']),
322
+ field['COLUMN_DEF'],
323
+ lookup_cast_type(strip_or_self(field['TYPE_NAME'])),
324
+ strip_or_self(field['TYPE_NAME']),
325
+ field['NULLABLE'])
333
326
  else
334
- AdvantageColumn.new(strip_or_self(field["COLUMN_NAME"]),
335
- field["COLUMN_DEF"],
336
- strip_or_self(field["TYPE_NAME"]),
337
- field["NULLABLE"])
327
+ AdvantageColumn.new(strip_or_self(field['COLUMN_NAME']),
328
+ field['COLUMN_DEF'],
329
+ strip_or_self(field['TYPE_NAME']),
330
+ field['NULLABLE'])
338
331
  end
339
332
  end
340
333
  end
@@ -342,13 +335,17 @@ module ActiveRecord
342
335
  # Return a list of indexes
343
336
  # EJS - Is there a way to get info without DD?
344
337
  def indexes(table_name, name = nil) #:nodoc:
345
- sql = "SELECT name, INDEX_OPTIONS & 1 AS [unique], index_expression FROM SYSTEM.INDEXES WHERE parent = '#{table_name}'"
338
+ sql = "SELECT INDEX_NAME, COLUMN_NAME, NON_UNIQUE FROM (EXECUTE PROCEDURE sp_GetIndexInfo( NULL, NULL, '#{table_name}', NULL, FALSE)) as gii"
346
339
  select(sql, name).map do |row|
347
- index = IndexDefinition.new(table_name, row["name"])
348
- index.unique = row["unique"] == 1
349
- index.columns = row["index_expression"]
350
- index
351
- end
340
+ next if row['INDEX_NAME'].blank?
341
+
342
+ IndexDefinition.new(
343
+ table_name,
344
+ row['INDEX_NAME'],
345
+ row['NON_UNIQUE'].zero?,
346
+ row['COLUMN_NAME'].split(',').map(&:strip)
347
+ )
348
+ end.compact
352
349
  end
353
350
 
354
351
  # Return the primary key
@@ -458,6 +455,9 @@ SQL
458
455
  sql = "SELECT COLUMN_NAME, IIF(COLUMN_DEF = 'NULL', null, COLUMN_DEF) as COLUMN_DEF, TYPE_NAME, NULLABLE from (EXECUTE PROCEDURE sp_GetColumns( NULL, NULL, '#{table_name}', NULL )) spgc where table_cat <> 'system';"
459
456
  structure = exec_query(sql, :skip_logging)
460
457
  raise(ActiveRecord::StatementInvalid, "Could not find table '#{table_name}'") if structure == false
458
+
459
+ # Add in a "ROWID" column to the structure?
460
+ structure.rows.unshift(['ROWID', nil, 'CHAR', 1]) if structure.rows.any?
461
461
  structure
462
462
  end
463
463
 
@@ -468,6 +468,17 @@ SQL
468
468
 
469
469
  private
470
470
 
471
+ # Used in the lookup_cast_type procedure
472
+ def initialize_type_map(m = type_map)
473
+ super
474
+ m.alias_type %r(memo)i, "char"
475
+ m.alias_type %r(long binary)i, "binary"
476
+ m.alias_type %r(integer)i, "int"
477
+ m.alias_type %r(short)i, "int"
478
+ m.alias_type %r(autoinc)i, "int"
479
+ m.alias_type %r(logical)i, "boolean"
480
+ end
481
+
471
482
  # Connect
472
483
  def connect! #:nodoc:
473
484
  result = ADS.instance.api.ads_connect(@connection, @connection_string)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-advantage-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edgar Sherman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-11-09 00:00:00.000000000 Z
12
+ date: 2021-05-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -94,7 +94,7 @@ metadata:
94
94
  allowed_push_host: https://rubygems.org
95
95
  homepage_uri: http://devzone.advantagedatabase.com
96
96
  source_code_uri: https://github.com/t12nslookup/activerecord-advantage-adapter/
97
- changelog_uri: https://github.com/t12nslookup/activerecord-advantage-adapter/blob/master/CHANGELOG.md
97
+ changelog_uri: https://github.com/t12nslookup/activerecord-advantage-adapter/CHANGELOG.md
98
98
  post_install_message:
99
99
  rdoc_options: []
100
100
  require_paths:
@@ -110,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  requirements: []
113
- rubygems_version: 3.1.2
113
+ rubygems_version: 3.1.4
114
114
  signing_key:
115
115
  specification_version: 4
116
116
  summary: ActiveRecord driver for Advantage