firebird_adapter 1.0.4 → 1.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9862bb89f1ee8b387ce778ea0289a0101b7ee385804b3e3e2af62a28415d522d
4
- data.tar.gz: af120e7dba499c2c75114eb91fc82975e0e328222bd8a51e1609bf3aa87f9620
3
+ metadata.gz: 3b0c7e1978e039950b5bb14813682b01ce6779a039c4690f93a829a8623d8e54
4
+ data.tar.gz: 67df3f9d4a025f40c422b0bcb35a7ae338ea3eb76eb5e6be9480ca46727d48a5
5
5
  SHA512:
6
- metadata.gz: 1c2b392daa062e95906a2d138f12cd8fa4e21a76c6d3375ebc93b398fd30c150507d7f5c3264405f552c150aaa125c151cfa12f873f7ee86385e2117663c0be1
7
- data.tar.gz: 980d8174f6ae3ee40286686fe1efee4e73dd1fd5e049e562ee915463196743ad8590951611ed473811092047861e4d9eb4b83216176692430661a2537e82973b
6
+ metadata.gz: 991f13fb8e58126d2f240026462db3fbfa16e20e20dfa3d80706078548cf4947d1ec395e758366fbf62070ce02f064916630b68695ead7df57391bb67e20aa70
7
+ data.tar.gz: 8306b2a48746dff1f29959ffce9e76be801f7c3531289fc792700cf190e1459b148ba58fd5fb997ed6865af9fe680d47fdcf37a64cd35c71bd7516c4cc1d8bfe
@@ -1,5 +1,21 @@
1
1
  module ActiveRecord::ConnectionAdapters::Firebird::DatabaseStatements
2
-
2
+
3
+ def native_database_types
4
+ {
5
+ primary_key: 'integer not null primary key',
6
+ string: { name: 'varchar', limit: 255 },
7
+ text: { name: 'blob sub_type text' },
8
+ integer: { name: 'integer' },
9
+ float: { name: 'float' },
10
+ decimal: { name: 'decimal' },
11
+ datetime: { name: 'timestamp' },
12
+ timestamp: { name: 'timestamp' },
13
+ date: { name: 'date' },
14
+ binary: { name: 'blob' },
15
+ boolean: { name: 'smallint' }
16
+ }
17
+ end
18
+
3
19
  def execute(sql, name = nil)
4
20
  log(sql, name) do
5
21
  ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
@@ -48,6 +64,36 @@ module ActiveRecord::ConnectionAdapters::Firebird::DatabaseStatements
48
64
  log("rollback transaction", nil) { @connection.rollback }
49
65
  end
50
66
 
67
+ def create_table(table_name, **options)
68
+ super
69
+
70
+ if options[:sequence] != false && options[:id] != false
71
+ sequence_name = options[:sequence] || default_sequence_name(table_name)
72
+ create_sequence(sequence_name)
73
+ end
74
+ end
75
+
76
+ def drop_table(table_name, options = {})
77
+ if options[:sequence] != false
78
+ sequence_name = options[:sequence] || default_sequence_name(table_name)
79
+ drop_sequence(sequence_name) if sequence_exists?(sequence_name)
80
+ end
81
+
82
+ super
83
+ end
84
+
85
+ def create_sequence(sequence_name)
86
+ execute("CREATE SEQUENCE #{sequence_name}") rescue nil
87
+ end
88
+
89
+ def drop_sequence(sequence_name)
90
+ execute("DROP SEQUENCE #{sequence_name}") rescue nil
91
+ end
92
+
93
+ def sequence_exists?(sequence_name)
94
+ @connection.generator_names.include?(sequence_name)
95
+ end
96
+
51
97
  def default_sequence_name(table_name, _column = nil)
52
98
  "#{table_name}_g01"
53
99
  end
@@ -46,6 +46,24 @@ class ActiveRecord::ConnectionAdapters::FirebirdAdapter < ActiveRecord::Connecti
46
46
  def reset!
47
47
  reconnect!
48
48
  end
49
+
50
+ def primary_keys(table_name)
51
+ raise ArgumentError unless table_name.present?
52
+
53
+ names = query_values(<<~SQL, "SCHEMA")
54
+ SELECT
55
+ s.rdb$field_name
56
+ FROM
57
+ rdb$indices i
58
+ JOIN rdb$index_segments s ON i.rdb$index_name = s.rdb$index_name
59
+ LEFT JOIN rdb$relation_constraints c ON i.rdb$index_name = c.rdb$index_name
60
+ WHERE
61
+ i.rdb$relation_name = '#{table_name.upcase}'
62
+ AND c.rdb$constraint_type = 'PRIMARY KEY';
63
+ SQL
64
+
65
+ names.map(&:strip).map(&:downcase)
66
+ end
49
67
 
50
68
  protected
51
69
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firebird_adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fábio Rodrigues
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-21 00:00:00.000000000 Z
11
+ date: 2019-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails