activerecord-oracle_enhanced-adapter 1.8.2 → 5.2.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/History.md +190 -5
- data/README.md +10 -10
- data/VERSION +1 -1
- data/lib/active_record/connection_adapters/emulation/oracle_adapter.rb +2 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/column.rb +9 -71
- data/lib/active_record/connection_adapters/oracle_enhanced/connection.rb +84 -73
- data/lib/active_record/connection_adapters/oracle_enhanced/context_index.rb +12 -12
- data/lib/active_record/connection_adapters/oracle_enhanced/database_limits.rb +52 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb +35 -7
- data/lib/active_record/connection_adapters/oracle_enhanced/database_tasks.rb +2 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/dbms_output.rb +59 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +379 -402
- data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_quoting.rb +7 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/lob.rb +46 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb +242 -247
- data/lib/active_record/connection_adapters/oracle_enhanced/oci_quoting.rb +9 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/procedures.rb +3 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb +25 -9
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb +9 -6
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_definitions.rb +10 -5
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_dumper.rb +48 -51
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +261 -59
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements_ext.rb +2 -34
- data/lib/active_record/connection_adapters/oracle_enhanced/structure_dump.rb +267 -222
- data/lib/active_record/connection_adapters/oracle_enhanced/type_metadata.rb +33 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/version.rb +2 -0
- data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +136 -547
- data/lib/active_record/{oracle_enhanced/type → type/oracle_enhanced}/boolean.rb +4 -2
- data/lib/active_record/{oracle_enhanced/type → type/oracle_enhanced}/integer.rb +4 -2
- data/lib/active_record/type/oracle_enhanced/json.rb +10 -0
- data/lib/active_record/{oracle_enhanced/type → type/oracle_enhanced}/national_character_string.rb +5 -3
- data/lib/active_record/type/oracle_enhanced/national_character_text.rb +36 -0
- data/lib/active_record/{oracle_enhanced/type → type/oracle_enhanced}/raw.rb +4 -2
- data/lib/active_record/{oracle_enhanced/type → type/oracle_enhanced}/string.rb +4 -2
- data/lib/active_record/{oracle_enhanced/type → type/oracle_enhanced}/text.rb +4 -2
- data/lib/active_record/type/oracle_enhanced/timestampltz.rb +25 -0
- data/lib/active_record/{oracle_enhanced/type → type/oracle_enhanced}/timestamptz.rb +4 -2
- data/lib/activerecord-oracle_enhanced-adapter.rb +2 -6
- data/spec/active_record/connection_adapters/{oracle_enhanced_emulate_oracle_adapter_spec.rb → emulation/oracle_adapter_spec.rb} +2 -0
- data/spec/active_record/connection_adapters/{oracle_enhanced_connection_spec.rb → oracle_enhanced/connection_spec.rb} +82 -38
- data/spec/active_record/connection_adapters/{oracle_enhanced_context_index_spec.rb → oracle_enhanced/context_index_spec.rb} +20 -16
- data/spec/active_record/connection_adapters/{oracle_enhanced_database_tasks_spec.rb → oracle_enhanced/database_tasks_spec.rb} +17 -5
- data/spec/active_record/connection_adapters/{oracle_enhanced_dbms_output_spec.rb → oracle_enhanced/dbms_output_spec.rb} +2 -0
- data/spec/active_record/connection_adapters/{oracle_enhanced_procedures_spec.rb → oracle_enhanced/procedures_spec.rb} +26 -33
- data/spec/active_record/connection_adapters/oracle_enhanced/quoting_spec.rb +196 -0
- data/spec/active_record/connection_adapters/{oracle_enhanced_schema_dump_spec.rb → oracle_enhanced/schema_dumper_spec.rb} +61 -90
- data/spec/active_record/connection_adapters/{oracle_enhanced_schema_statements_spec.rb → oracle_enhanced/schema_statements_spec.rb} +95 -28
- data/spec/active_record/connection_adapters/{oracle_enhanced_structure_dump_spec.rb → oracle_enhanced/structure_dump_spec.rb} +48 -2
- data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +202 -331
- data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +15 -1106
- data/spec/active_record/oracle_enhanced/type/binary_spec.rb +119 -0
- data/spec/active_record/oracle_enhanced/type/boolean_spec.rb +207 -0
- data/spec/active_record/{connection_adapters/oracle_enhanced_dirty_spec.rb → oracle_enhanced/type/dirty_spec.rb} +3 -1
- data/spec/active_record/oracle_enhanced/type/float_spec.rb +48 -0
- data/spec/active_record/oracle_enhanced/type/integer_spec.rb +91 -0
- data/spec/active_record/oracle_enhanced/type/json_spec.rb +57 -0
- data/spec/active_record/oracle_enhanced/type/national_character_string_spec.rb +55 -0
- data/spec/active_record/oracle_enhanced/type/national_character_text_spec.rb +230 -0
- data/spec/active_record/oracle_enhanced/type/raw_spec.rb +122 -0
- data/spec/active_record/oracle_enhanced/type/text_spec.rb +229 -0
- data/spec/active_record/oracle_enhanced/type/timestamp_spec.rb +75 -0
- data/spec/spec_helper.rb +15 -1
- data/spec/support/alter_system_set_open_cursors.sql +1 -0
- metadata +63 -48
- data/lib/active_record/connection_adapters/oracle_enhanced/column_dumper.rb +0 -28
- data/lib/active_record/oracle_enhanced/type/json.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 756277df9a862718b6a18af9b3ff476e12a2497c45d8bdcfdaf47d4be0ebff8b
|
4
|
+
data.tar.gz: e970bf14ed9a4eec4b85c67c50c804ffa6a4e52a788a0d95463dfd44b5453ce8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 750450b6486e4d3289e4131dd98e433eef87f37e23d20004729cb2fffe6564e98f476a08afe987cad7f673499ded21903300a31a19bed7f3ff0a18f735fd5de5
|
7
|
+
data.tar.gz: dead151bdc335ee36ac65e1c8b50679fedc1d1a388b314e3f71dce6a79186ebd893fb261e97018a9773c3e65820daf465e47177e5f9ed949a7c2c4fee4f2b837
|
data/History.md
CHANGED
@@ -1,3 +1,188 @@
|
|
1
|
+
## 5.2.0.beta1 / 2017-11-27
|
2
|
+
|
3
|
+
* Major changes and fixes
|
4
|
+
|
5
|
+
* Support Rails 5.2.0.beta1 [Not released yet but this history will be available when Rails 5.2.0.beta1 is available]
|
6
|
+
* Oracle enhanced adapter version follows Rails versioning [#1488]
|
7
|
+
* Handle `TIMESTAMP WITH TIMEZONE` separately from `TIMEZONE` [#1267]
|
8
|
+
* Support `timestamptz` and `timestampltz` for migrations #1285
|
9
|
+
* `supports_json?` returns false [#1562]
|
10
|
+
* Add synonyms in `data_sources` [#1380, #1567]
|
11
|
+
* Add sequence with settings to structure dump [#1354]
|
12
|
+
* Support for NCLOB datatype [#1428, #1440]
|
13
|
+
* Use conventional fixture load [#1366]
|
14
|
+
* Address `ORA-00905: missing keyword: EXPLAIN PLAN FOR` [#1384]
|
15
|
+
* Use new method name for active record dirty checks [#1406]
|
16
|
+
* check for schema name when validating table name [#1408, #1410]
|
17
|
+
* Prefer to place a table options before `force: :cascade` [#1457]
|
18
|
+
* Enable TCP keepalive for OCI connections [#1489]
|
19
|
+
* Do not expose `all_schema_indexes` [#1495]
|
20
|
+
* Using bind variables for dictionary access [#1498]
|
21
|
+
* Use bind variables for `table_comment` `column_comment` `foreign_keys` [#1502]
|
22
|
+
* Respect database instance `cursor_sharing` value `exact` by default [#1503, #1556]
|
23
|
+
* Address `CommentTest#test_change_table_comment_to_nil` failure [#1504]
|
24
|
+
* Address explain with binds errors [#908, #1386, #1538]
|
25
|
+
* Address `MigrationTest#test_create_table_with_query_from_relation` error [#1543]
|
26
|
+
* Follow the new interface of AR::ConnectionAdapters::IndexDefinition#initialize [#1295]
|
27
|
+
* Remove `lengths`, `where`, `using` from `IndexDefinition` [#1529]
|
28
|
+
* Arity change in insert method [#1382]
|
29
|
+
* Restore the ability that SQL with binds for `insert` [#1424]
|
30
|
+
* Restore `to_sql` to return only SQL [#1423]
|
31
|
+
* Signature fix for `select_one` `select_value` `select_values` [#1475]
|
32
|
+
* `columns` second argument does not exist in Abstract adapter [#1519]
|
33
|
+
* Arel::Nodes::BindParam#initialize introduced [#1383]
|
34
|
+
* Log the purpose of sql in `disable_referential_integrity` [#1550]
|
35
|
+
* Change log format of "Primary Key Trigger" to one line [#1551]
|
36
|
+
* Log multi lines SQL statements into one line [#1553]
|
37
|
+
* Log multi lines SQL statements into one line at `structure_dump.rb` [#1555]
|
38
|
+
* [ci skip] `open_cursors` value should be larger than `:statement_limit` [#1573]
|
39
|
+
* [skip ci] Add `schema` option in the comment [#1574]
|
40
|
+
* [skip ci] `emulate_booleans_from_strings` behavior changes [#1576]
|
41
|
+
* Restore calling `OCIConnection#bind_returning_param` [#1581]
|
42
|
+
* Add these errors to be recognized as `ActiveRecord::StatementInvalid` [#1584]
|
43
|
+
* Add `ORA-02289` to be recognized as `ActiveRecord::StatementInvalid` [#1586]
|
44
|
+
* Address `BasicsTest#test_clear_cache!` failure [#1587]
|
45
|
+
* Use Bundler 1.15 to workaround bundler/bundler#6072 [#1590]
|
46
|
+
* Translate `ORA-00060` into `ActiveRecord::Deadlocked` error [#1591]
|
47
|
+
* Add `ORA-02449` to be recognized as `ActiveRecord::StatementInvalid` [#1593, #1596]
|
48
|
+
* Support `discard!` method [#1598]
|
49
|
+
|
50
|
+
* Deprecation or removing deprecated code
|
51
|
+
|
52
|
+
* Remove `OracleEnhancedAdapter.cache_columns` [#1490, #1492]
|
53
|
+
* Deprecate `supports_statement_cache?` [#1321]
|
54
|
+
* Remove `compress_lines` [#1327]
|
55
|
+
* Remove `OracleEnhanced::SchemaDumper::TableInspect` [#1400]
|
56
|
+
* Remove `remove_prefix_and_suffix` and specs from Oracle enhanced adapter [#1420]
|
57
|
+
* Remove unused returning value `stream` [#1438]
|
58
|
+
* Remove `OracleEnhancedAdapter.emulate_dates` [#1448]
|
59
|
+
* Remove `emulate_dates` and `emulate_dates_by_column_name` [#1450]
|
60
|
+
* Remove `emulate_integers_by_column_name` [#1451]
|
61
|
+
* Remove `@@do_not_prefetch_primary_key` class variable [#1496]
|
62
|
+
* Remove `string_to_date` which has been removed from Rails 4.2 [#1509]
|
63
|
+
* Remove `string_to_time` which has been removed from Rails 4.2 [#1510]
|
64
|
+
* Remove `guess_date_or_time` which has not been called [#1511]
|
65
|
+
* Remove unused `object_type?` and `object_type` ivar [#1512]
|
66
|
+
* Remove non-existent `:nchar` from `attr_reader` [#1513]
|
67
|
+
* Remove `ActiveRecord::ConnectionAdapter::OracleEnhanced::Column#lob?` [#1522]
|
68
|
+
* Remove `OracleEnhanced::Column#returning_id?` [#1523]
|
69
|
+
* Remove `attr_reader :table_name` [#1524]
|
70
|
+
* Remove `combine_bind_parameters` [#1527]
|
71
|
+
* Remove `OracleEnhancedAdapter.default_tablespaces[native_database_types[type][:name]]` [#1544]
|
72
|
+
* Remove unused `require "digest/sha1"` [#1545]
|
73
|
+
* Remove deprecations for 5.2 [#1548]
|
74
|
+
* Remove `OracleEnhanced::Connection#select_values` [#1558]
|
75
|
+
* Remove `@connection` from `@connection.oracle_downcase` and `@connection.select_value` [#1559]
|
76
|
+
* Rename `OracleEnhanced::Connection#select_value` to `_select_value` [#1563]
|
77
|
+
* Rename `OracleEnhanced::Connection#oracle_downcase` to `_oracle_downcase` [#1565]
|
78
|
+
* Remove `OCIConnection#typecast_result_value` handling `OraNumber` [#1578]
|
79
|
+
* [skip ci] Changing `NLS_DATE_FORMAT` and `NLS_TIMESTAMP_FORMAT` is not supported [#1575]
|
80
|
+
* [skip ci] Remove ruby versions in the comment [#1577]
|
81
|
+
* Remove `OCIConnection#returning_clause` and `JDBCConnection#returning_clause` [#1579]
|
82
|
+
* Remove `OCIConnection#exec_with_returning` and `JDBCConnection#exec_with_returning` [#1580]
|
83
|
+
* Update `JDBCConnection#bind_param` case condition [#1583]
|
84
|
+
|
85
|
+
* Refactoring
|
86
|
+
|
87
|
+
* Refactor `SchemaDumper` to make it possible to adapter specific customization [#1430]
|
88
|
+
* Rename `SchemaDumper#indexes` to `SchemaDumper#_indexes` [#1399]
|
89
|
+
* Use ActiveRecord::Type::Json [#1352]
|
90
|
+
* Introduce module `DatabaseLimits` [#1322]
|
91
|
+
* Move `oracle_downcase` to `Quoting` module [#1328]
|
92
|
+
* Make `type_map` to private because it is only used in the connection adapter [#1381]
|
93
|
+
* Remove `add_runtime_dependency` with arel [#1385]
|
94
|
+
* Move methods for synonyms out of `SchemaStatementsExt` [#1387]
|
95
|
+
* Remove incorrect prepend to `ActiveRecord::ColumnDumper` [#1394]
|
96
|
+
* Handle `ActiveRecord::SchemaDumper` by `adapter_name` [#1395]
|
97
|
+
* Rewrite `remove_prefix_and_suffix` to be similar with super #1401
|
98
|
+
* `remove_prefix_and_suffix` handles dollar sign by `Regexp#escape` [#1402]
|
99
|
+
* `prepare_column_options` is now private [#1429]
|
100
|
+
* Introduce `OracleEnhanced::SchemaStatements#table_options` [#1439]
|
101
|
+
* Extract `ActiveRecord::ConnectionAdapters::OracleEnhanced::Column` [#1445]
|
102
|
+
* Extract `ActiveRecord::ConnectionAdapters::OracleEnhanced::DbmsOutput` [#1446]
|
103
|
+
* Introduce `SchemaDumpingHelper#dump_table_schema` [#1455]
|
104
|
+
* Rename `OracleEnhancedConnection` to `OracleEnhanced::Connection` [#1477]
|
105
|
+
* Introduce `ActiveRecord::ConnectionAdapters::OracleEnhanced::TypeMetadata` [#1515]
|
106
|
+
* Change `schema_creation` to private [#1517]
|
107
|
+
* Change `create_table_definition` and `fetch_type_metadata` to private [#1518]
|
108
|
+
* Refactor `columns` [#1521]
|
109
|
+
* Let `ActiveRecord::ConnectionAdapters::OracleEnhanced::TypeMetadata` handle `virtual` type [#1526]
|
110
|
+
* Clean up `column_definitions` method [#1528]
|
111
|
+
* Remove unnecessary `ActiveRecord::ConnectionAdapters` [#1530]
|
112
|
+
* Rename `OracleEnhancedStructureDump` to `OracleEnhanced::StructureDump` [#1531]
|
113
|
+
* Move up require for types [#1533]
|
114
|
+
* These methods are private in `AbstractAdapter` or `PostgreSQLAdapter` [#1534]
|
115
|
+
* `ActiveRecord::ConnectionAdapters::AbstractAdapter#log` is a `private` [#1535]
|
116
|
+
* Move `self.default_sequence_start_value` method [#1536]
|
117
|
+
* Rename `ActiveRecord::OracleEnhanced::Type` to `ActiveRecord::Type::OracleEnhanced` [#1541]
|
118
|
+
* Move `write_lobs` under `OracleEnhanced::DatabaseStatements` module [#1546]
|
119
|
+
* Introduce `OracleEnhanced::Lob` not to modify `ActiveRecord::Base` directly [#1547]
|
120
|
+
* Use `ActiveSupport.on_load` to hook into `ActiveRecord::Base` [#1568]
|
121
|
+
* Call `virtual_columns_for` when `supports_virtual_columns?` returns true [#1554]
|
122
|
+
* Move `tables` and related methods into `OracleEnhanced::SchemaStatements` [#1557]
|
123
|
+
* Avoid using `OracleEnhanced::Connection#select_value` [#1560]
|
124
|
+
* Make `OracleEnhanced::Connection#describe` private [#1566]
|
125
|
+
|
126
|
+
* Changes in specs
|
127
|
+
|
128
|
+
* Always generate `debug.log` for unit tests [#1476]
|
129
|
+
* Use Rails migration for creating table at "using offset and limit" [#1276]
|
130
|
+
* Use Rails migration for creating table at `valid_type?` [#1277]
|
131
|
+
* Clean up before(:each) and after(:each) at "rename tables and sequences" [#1278]
|
132
|
+
* Use Rails migration for creating table at `BINARY_FLOAT columns" specs [#1280]
|
133
|
+
* Use Rails migration for creating table at "handling of BLOB columns" [#1282]
|
134
|
+
* Use Rails migration for creating table at "handling of CLOB columns" [#1283]
|
135
|
+
* Use Rails migration for creating table at "assign string to :date and :datetime columns" [#1284]
|
136
|
+
* Use Rails migration for creating table at "table columns" [#1287]
|
137
|
+
* Use Rails migration for creating table at procedure specs [#1288]
|
138
|
+
* Use Rails migration for creating table at database tasks specs [#1290]
|
139
|
+
* Suppress `warning: assigned but unused variable - poolable_connection_factory` [#1292]
|
140
|
+
* Suppress `warning: assigned but unused variable - post` [#1293]
|
141
|
+
* Move spec files under `oracle_enhanced` directory [#1441]
|
142
|
+
* Move spec files under `emulation` directory [#1442]
|
143
|
+
* Move schema_dumper_spec under `oracle_enhanced` directory [#1443]
|
144
|
+
* Rename spec/active_record/connection_adapters/oracle_enhanced_dirty_spec.rb [#1447]
|
145
|
+
* Remove `set_boolean_columns` from `oracle_enhanced_data_types_spec.rb` [#1452]
|
146
|
+
* Remove `set_string_columns` from `oracle_enhanced_data_types_spec.rb` [#1454]
|
147
|
+
* Use `drop_table` if_exists: true` to avoid rescue nil [#1456]
|
148
|
+
* Extract JSON data type specs [#1459]
|
149
|
+
* Extract NationalCharacterString data type specs [#1460]
|
150
|
+
* Extract RAW data type specs [#1461]
|
151
|
+
* Extract TEXT data type specs [#1462]
|
152
|
+
* Extract INTEGER data type specs [#1463]
|
153
|
+
* Remove redundant `type` from spec files [#1464]
|
154
|
+
* Extract boolean data type specs [#1465]
|
155
|
+
* Extract NationalCharacterText data type specs [#1466]
|
156
|
+
* Extract specs for `OracleEnhanced::Quoting` [#1469]
|
157
|
+
* Extract TIMPSTAMP, TIMESTAMPTZ and TIMESTAMPLTZ specs [#1480]
|
158
|
+
* Extract FLOAT type specs [#1482]
|
159
|
+
* Use `SchemaDumpingHelper#dump_table_schema` at `context_index_spec` [#1491]
|
160
|
+
* Remove unused `fk_name` [#1514]
|
161
|
+
* Show correct bind value information in debug.log [#1537]
|
162
|
+
* rubocop 0.48.1 [#1281]
|
163
|
+
|
164
|
+
* Changes for CI and builds
|
165
|
+
|
166
|
+
* Use `rubocop-0-51` channel on Code Climate [#1589]
|
167
|
+
* Use `rubocop-0-50` channel on Code Climate [#1539]
|
168
|
+
* Use `rubocop-0-49` channel to run rubocop 0.49 [#1478]
|
169
|
+
* Bump ruby versions to 2.4.2, 2.3.5 and 2.2.8 at Travis [#1484]
|
170
|
+
* CI against JRuby 9.1.14.0 [#1592]
|
171
|
+
* CI against JRuby 9.1.13.0 [#1471]
|
172
|
+
* set `open_cursor` value to `1200` [#1431]
|
173
|
+
* Use bundler 1.16.0.preX and update rubygems to the latest [#1532]
|
174
|
+
* [ci skip] Create an issue template [#1317]
|
175
|
+
* [ci skip] Add Oracle enhanced adapter version to the issue template [#1319]
|
176
|
+
* [ci skip] Remove `self.emulate_integers_by_column_name = true` [#1494]
|
177
|
+
* Remove leftover comments [ci skip] [#1520]
|
178
|
+
* Move issue template to github sub directory [skip ci] [#1320]
|
179
|
+
* Replace :github source with https [#1499]
|
180
|
+
* Simplify `git_source` in Gemfile [#1500]
|
181
|
+
* Enable and apply `Style/Semicolon` [#1570]
|
182
|
+
* Enable and apply Style/RedundantReturn [#1571]
|
183
|
+
* Enable `Style/DefWithParentheses` rubocop rule [#1597]
|
184
|
+
* bundler 1.16.0 is out, no more --pre [#1572]
|
185
|
+
|
1
186
|
## 1.8.2 / 2017-08-24
|
2
187
|
|
3
188
|
* Changes and bug fixes
|
@@ -10,7 +195,7 @@
|
|
10
195
|
* Bump ruby versions [#1346]
|
11
196
|
* rubocop namespace changes from `Style` to `Layout` [#1347, #1351]
|
12
197
|
|
13
|
-
*
|
198
|
+
* Known issues
|
14
199
|
* No changes since 1.8.0.rc3
|
15
200
|
|
16
201
|
## 1.8.1 / 2017-05-11
|
@@ -579,7 +764,7 @@
|
|
579
764
|
* Address undefined method `cast_type' [#805]
|
580
765
|
* Better fix to support "Relation#count does not support finder options anymore in Rails [#788, #787]
|
581
766
|
* ActiveRecord::Calculations#count no longer accepts an options hash argument #754
|
582
|
-
*
|
767
|
+
* Suppress WARNINGs using `raise_error` without specific errors [#724]
|
583
768
|
* Use RSpec 3 [#707]
|
584
769
|
* Update "OracleEnhancedAdapter boolean type detection based on string column types and names" [#873]
|
585
770
|
* Update "OracleEnhancedAdapter integer type detection based on column names" [#871]
|
@@ -866,7 +1051,7 @@
|
|
866
1051
|
* Update README to support assignment methods [#365]
|
867
1052
|
* Remove add_limit_offset! method [#369]
|
868
1053
|
* Update Gemfile to use `bundle config --local` [#370]
|
869
|
-
* `describe` does not try super when no
|
1054
|
+
* `describe` does not try super when no database link and ORA-4043 returned [#375]
|
870
1055
|
* Support `remove_columns` [#377]
|
871
1056
|
* Dump views in alphabetical order and add `FORCE` option [#378]
|
872
1057
|
|
@@ -1251,10 +1436,10 @@
|
|
1251
1436
|
* Forked from original activerecord-oracle-adapter-1.0.0.9216
|
1252
1437
|
* Renamed oracle adapter to oracle_enhanced adapter
|
1253
1438
|
* Added "enhanced" to method and class definitions so that oracle_enhanced and original oracle adapter
|
1254
|
-
could be used
|
1439
|
+
could be used simultaneously
|
1255
1440
|
* Added Rails rake tasks as a copy from original oracle tasks
|
1256
1441
|
* Enhancements:
|
1257
|
-
* Improved
|
1442
|
+
* Improved performance of schema dump methods when used on large data dictionaries
|
1258
1443
|
* Added LOB writing callback for sessions stored in database
|
1259
1444
|
* Added emulate_dates_by_column_name option
|
1260
1445
|
* Added emulate_integers_by_column_name option
|
data/README.md
CHANGED
@@ -239,12 +239,6 @@ ENV['TZ'] = 'UTC'
|
|
239
239
|
|
240
240
|
ActiveSupport.on_load(:active_record) do
|
241
241
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.class_eval do
|
242
|
-
# id columns and columns which end with _id will always be converted to integers
|
243
|
-
self.emulate_integers_by_column_name = true
|
244
|
-
|
245
|
-
# DATE columns which include "date" in name will be converted to Date, otherwise to Time
|
246
|
-
self.emulate_dates_by_column_name = true
|
247
|
-
|
248
242
|
# true and false will be stored as 'Y' and 'N'
|
249
243
|
self.emulate_booleans_from_strings = true
|
250
244
|
|
@@ -481,7 +475,7 @@ Post.contains(:all_text, "aaa within title")
|
|
481
475
|
Post.contains(:all_text, "bbb within comment_author")
|
482
476
|
```
|
483
477
|
|
484
|
-
Please note that `index_column` must be a real column in your database and it's value will be
|
478
|
+
Please note that `index_column` must be a real column in your database and it's value will be overridden every time your `index_column_trigger_on` columns are changed. So, _do not use columns with real data as `index_column`_.
|
485
479
|
|
486
480
|
Index column can be created as:
|
487
481
|
|
@@ -639,14 +633,20 @@ development:
|
|
639
633
|
)"
|
640
634
|
```
|
641
635
|
|
636
|
+
### Schema cache
|
637
|
+
|
638
|
+
`rails db:schema:cache:dump` generates `db/schema_cache.yml` to avoid queries for Oracle database dictionary, which could help your application response time if it takes time to look up database structure.
|
639
|
+
|
640
|
+
if any database structure changed by migrations, execute `rails db:schema:cache:dump` again and restart Rails server to reflect changes.
|
641
|
+
|
642
642
|
UPGRADE
|
643
643
|
---------------
|
644
644
|
### Upgrade Rails 5.0 or older version to Rails 5.1
|
645
645
|
|
646
646
|
If your application gets `ORA-01000: maximum open cursors exceeded`
|
647
|
-
after upgrading to Rails 5.1
|
648
|
-
check these two values and configure
|
649
|
-
is larger than `
|
647
|
+
after upgrading to Rails 5.1,
|
648
|
+
check these two values and configure `open_cursors` parameter value
|
649
|
+
at Oracle database instance is larger than `:statement_limit` value at database.yml.
|
650
650
|
|
651
651
|
* `open_cursors` value at Oracle database instance
|
652
652
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
5.2.0.beta1
|
@@ -1,81 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActiveRecord
|
2
4
|
module ConnectionAdapters #:nodoc:
|
3
|
-
|
4
|
-
|
5
|
+
module OracleEnhanced
|
6
|
+
class Column < ActiveRecord::ConnectionAdapters::Column
|
7
|
+
delegate :virtual, to: :sql_type_metadata, allow_nil: true
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
@virtual_column_data_default = default.inspect if virtual
|
9
|
-
@returning_id = returning_id
|
10
|
-
if virtual
|
11
|
-
default_value = nil
|
12
|
-
else
|
13
|
-
default_value = self.class.extract_value_from_default(default)
|
14
|
-
end
|
15
|
-
super(name, default_value, sql_type_metadata, null, table_name, comment: comment)
|
16
|
-
# Is column NCHAR or NVARCHAR2 (will need to use N'...' value quoting for these data types)?
|
17
|
-
# Define only when needed as adapter "quote" method will check at first if instance variable is defined.
|
18
|
-
if sql_type_metadata
|
19
|
-
@object_type = sql_type_metadata.sql_type.include? "."
|
9
|
+
def initialize(name, default, sql_type_metadata = nil, null = true, table_name = nil, comment = nil) #:nodoc:
|
10
|
+
super(name, default, sql_type_metadata, null, table_name, comment: comment)
|
20
11
|
end
|
21
|
-
# TODO: Need to investigate when `sql_type` becomes nil
|
22
|
-
end
|
23
|
-
|
24
|
-
def virtual?
|
25
|
-
@virtual
|
26
|
-
end
|
27
|
-
|
28
|
-
def returning_id?
|
29
|
-
@returning_id
|
30
|
-
end
|
31
|
-
|
32
|
-
def lob?
|
33
|
-
self.sql_type =~ /LOB$/i
|
34
|
-
end
|
35
|
-
|
36
|
-
def object_type?
|
37
|
-
@object_type
|
38
|
-
end
|
39
12
|
|
40
|
-
|
41
|
-
|
42
|
-
def self.value_to_boolean(value) #:nodoc:
|
43
|
-
if value == true || value == false
|
44
|
-
value
|
45
|
-
elsif value.is_a?(String) && value.blank?
|
46
|
-
nil
|
47
|
-
else
|
48
|
-
%w(true t 1 y +).include?(value.to_s.downcase)
|
13
|
+
def virtual?
|
14
|
+
virtual
|
49
15
|
end
|
50
16
|
end
|
51
|
-
|
52
|
-
# convert Time or DateTime value to Date for :date columns
|
53
|
-
def self.string_to_date(string) #:nodoc:
|
54
|
-
return string.to_date if string.is_a?(Time) || string.is_a?(DateTime)
|
55
|
-
super
|
56
|
-
end
|
57
|
-
|
58
|
-
# convert Date value to Time for :datetime columns
|
59
|
-
def self.string_to_time(string) #:nodoc:
|
60
|
-
return string.to_time if string.is_a?(Date) && !OracleEnhancedAdapter.emulate_dates
|
61
|
-
super
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
def self.extract_value_from_default(default)
|
67
|
-
case default
|
68
|
-
when String
|
69
|
-
default.gsub(/''/, "'")
|
70
|
-
else
|
71
|
-
default
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def guess_date_or_time(value)
|
76
|
-
value.respond_to?(:hour) && ((value.hour == 0) && (value.min == 0) && (value.sec == 0)) ?
|
77
|
-
Date.new(value.year, value.month, value.day) : value
|
78
|
-
end
|
79
17
|
end
|
80
18
|
end
|
81
19
|
end
|
@@ -1,49 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActiveRecord
|
2
4
|
module ConnectionAdapters
|
3
5
|
# interface independent methods
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
module OracleEnhanced
|
7
|
+
class Connection #:nodoc:
|
8
|
+
def self.create(config)
|
9
|
+
case ORACLE_ENHANCED_CONNECTION
|
10
|
+
when :oci
|
11
|
+
OracleEnhanced::OCIConnection.new(config)
|
12
|
+
when :jdbc
|
13
|
+
OracleEnhanced::JDBCConnection.new(config)
|
14
|
+
else
|
15
|
+
nil
|
16
|
+
end
|
13
17
|
end
|
14
|
-
end
|
15
18
|
|
16
|
-
|
19
|
+
attr_reader :raw_connection
|
17
20
|
|
18
|
-
|
19
|
-
# for neatness, we'll downcase within Rails. EXCEPT that folks CAN quote
|
20
|
-
# their column names when creating Oracle tables, which makes then case-sensitive.
|
21
|
-
# I don't know anybody who does this, but we'll handle the theoretical case of a
|
22
|
-
# camelCase column name. I imagine other dbs handle this different, since there's a
|
23
|
-
# unit test that's currently failing test_oci.
|
24
|
-
def oracle_downcase(column_name)
|
25
|
-
return nil if column_name.nil?
|
26
|
-
column_name =~ /[a-z]/ ? column_name : column_name.downcase
|
27
|
-
end
|
21
|
+
private
|
28
22
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
23
|
+
# Used always by JDBC connection as well by OCI connection when describing tables over database link
|
24
|
+
def describe(name)
|
25
|
+
name = name.to_s
|
26
|
+
if name.include?("@")
|
27
|
+
name, db_link = name.split("@")
|
28
|
+
default_owner = _select_value("SELECT username FROM all_db_links WHERE db_link = '#{db_link.upcase}'")
|
29
|
+
db_link = "@#{db_link}"
|
30
|
+
else
|
31
|
+
db_link = nil
|
32
|
+
default_owner = @owner
|
33
|
+
end
|
34
|
+
real_name = OracleEnhanced::Quoting.valid_table_name?(name) ? name.upcase : name
|
35
|
+
if real_name.include?(".")
|
36
|
+
table_owner, table_name = real_name.split(".")
|
37
|
+
else
|
38
|
+
table_owner, table_name = default_owner, real_name
|
39
|
+
end
|
40
|
+
sql = <<-SQL.strip.gsub(/\s+/, " ")
|
47
41
|
SELECT owner, table_name, 'TABLE' name_type
|
48
42
|
FROM all_tables#{db_link}
|
49
43
|
WHERE owner = '#{table_owner}'
|
@@ -64,46 +58,63 @@ module ActiveRecord
|
|
64
58
|
WHERE owner = 'PUBLIC'
|
65
59
|
AND synonym_name = '#{real_name}'
|
66
60
|
SQL
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
61
|
+
if result = _select_one(sql)
|
62
|
+
case result["name_type"]
|
63
|
+
when "SYNONYM"
|
64
|
+
describe("#{result['owner'] && "#{result['owner']}."}#{result['table_name']}#{db_link}")
|
65
|
+
else
|
66
|
+
db_link ? [result["owner"], result["table_name"], db_link] : [result["owner"], result["table_name"]]
|
67
|
+
end
|
68
|
+
else
|
69
|
+
raise OracleEnhanced::ConnectionException, %Q{"DESC #{name}" failed; does it exist?}
|
70
|
+
end
|
73
71
|
end
|
74
|
-
else
|
75
|
-
raise OracleEnhancedConnectionException, %Q{"DESC #{name}" failed; does it exist?}
|
76
|
-
end
|
77
|
-
end
|
78
72
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
73
|
+
# Oracle column names by default are case-insensitive, but treated as upcase;
|
74
|
+
# for neatness, we'll downcase within Rails. EXCEPT that folks CAN quote
|
75
|
+
# their column names when creating Oracle tables, which makes then case-sensitive.
|
76
|
+
# I don't know anybody who does this, but we'll handle the theoretical case of a
|
77
|
+
# camelCase column name. I imagine other dbs handle this different, since there's a
|
78
|
+
# unit test that's currently failing test_oci.
|
79
|
+
#
|
80
|
+
# `_oracle_downcase` is expected to be called only from
|
81
|
+
# `ActiveRecord::ConnectionAdapters::OracleEnhanced::OCIConnection`
|
82
|
+
# or `ActiveRecord::ConnectionAdapters::OracleEnhanced::JDBCConnection`.
|
83
|
+
# Other method should call `ActiveRecord:: ConnectionAdapters::OracleEnhanced::Quoting#oracle_downcase`
|
84
|
+
# since this is kind of quoting, not connection.
|
85
|
+
# To avoid it is called from anywhere else, added _ at the beginning of the method name.
|
86
|
+
def _oracle_downcase(column_name)
|
87
|
+
return nil if column_name.nil?
|
88
|
+
column_name =~ /[a-z]/ ? column_name : column_name.downcase
|
89
|
+
end
|
85
90
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
91
|
+
# _select_one and _select_value methods are expected to be called
|
92
|
+
# only from `ActiveRecord::ConnectionAdapters::OracleEnhanced::Connection#describe`
|
93
|
+
# Other methods should call `ActiveRecord::ConnectionAdapters::DatabaseStatements#select_one`
|
94
|
+
# and `ActiveRecord::ConnectionAdapters::DatabaseStatements#select_value`
|
95
|
+
# To avoid called from its subclass added a underscore in each method.
|
92
96
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
end
|
97
|
+
# Returns a record hash with the column names as keys and column values
|
98
|
+
# as values.
|
99
|
+
def _select_one(arel, name = nil, binds = [])
|
100
|
+
result = select(arel)
|
101
|
+
result.first if result
|
102
|
+
end
|
100
103
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
104
|
+
# Returns a single value from a record
|
105
|
+
def _select_value(arel, name = nil, binds = [])
|
106
|
+
if result = _select_one(arel)
|
107
|
+
result.values.first
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
105
111
|
|
106
|
-
|
112
|
+
# Returns array with major and minor version of database (e.g. [12, 1])
|
113
|
+
def database_version
|
114
|
+
raise NoMethodError, "Not implemented for this raw driver"
|
115
|
+
end
|
116
|
+
class ConnectionException < StandardError #:nodoc:
|
117
|
+
end
|
107
118
|
end
|
108
119
|
end
|
109
120
|
end
|