ActiveRecord-JDBC 0.3 → 0.3.1
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.
- data/History.txt +4 -0
- data/Rakefile +1 -1
- data/lib/jdbc_adapter/jdbc_db2.rb +1 -1
- data/lib/jdbc_adapter/jdbc_derby.rb +89 -7
- data/lib/jdbc_adapter/jdbc_hsqldb.rb +1 -1
- data/lib/jdbc_adapter/jdbc_mssql.rb +1 -1
- data/lib/jdbc_adapter/jdbc_oracle.rb +1 -26
- data/lib/jdbc_adapter/jdbc_postgre.rb +1 -1
- data/lib/jdbc_adapter_internal.jar +0 -0
- metadata +1 -1
data/History.txt
CHANGED
data/Rakefile
CHANGED
@@ -84,7 +84,7 @@ begin
|
|
84
84
|
Rake::Task['manifest'].invoke # Always regen manifest, so Hoe has up-to-date list of files
|
85
85
|
|
86
86
|
require 'hoe'
|
87
|
-
Hoe.new("ActiveRecord-JDBC", "0.3") do |p|
|
87
|
+
Hoe.new("ActiveRecord-JDBC", "0.3.1") do |p|
|
88
88
|
p.rubyforge_name = "jruby-extras"
|
89
89
|
p.url = "http://jruby-extras.rubyforge.org/ActiveRecord-JDBC"
|
90
90
|
p.author = "Nick Sieger, Ola Bini and JRuby contributors"
|
@@ -24,7 +24,7 @@ module JdbcSpec
|
|
24
24
|
return value if value.is_a? Time
|
25
25
|
time_array = ParseDate.parsedate value
|
26
26
|
time_array[0] ||= 2000; time_array[1] ||= 1; time_array[2] ||= 1;
|
27
|
-
Time.send(Base.default_timezone, *time_array) rescue nil
|
27
|
+
Time.send(ActiveRecord::Base.default_timezone, *time_array) rescue nil
|
28
28
|
end
|
29
29
|
|
30
30
|
def guess_date_or_time(value)
|
@@ -27,7 +27,7 @@ module JdbcSpec
|
|
27
27
|
return value if value.is_a? Time
|
28
28
|
time_array = ParseDate.parsedate value
|
29
29
|
time_array[0] ||= 2000; time_array[1] ||= 1; time_array[2] ||= 1;
|
30
|
-
Time.send(Base.default_timezone, *time_array) rescue nil
|
30
|
+
Time.send(ActiveRecord::Base.default_timezone, *time_array) rescue nil
|
31
31
|
end
|
32
32
|
|
33
33
|
def guess_date_or_time(value)
|
@@ -119,7 +119,88 @@ module JdbcSpec
|
|
119
119
|
def rename_table(name, new_name)
|
120
120
|
execute "RENAME TABLE #{name} TO #{new_name}"
|
121
121
|
end
|
122
|
+
|
123
|
+
COLUMN_INFO_STMT = "SELECT C.COLUMNNAME, C.REFERENCEID, C.COLUMNNUMBER FROM SYS.SYSCOLUMNS C, SYS.SYSTABLES T WHERE T.TABLEID = '%s' AND T.TABLEID = C.REFERENCEID ORDER BY C.COLUMNNUMBER"
|
124
|
+
|
125
|
+
COLUMN_TYPE_STMT = "SELECT COLUMNDATATYPE, COLUMNDEFAULT FROM SYS.SYSCOLUMNS WHERE REFERENCEID = '%s' AND COLUMNNAME = '%s'"
|
126
|
+
|
127
|
+
AUTO_INC_STMT = "SELECT AUTOINCREMENTSTART, AUTOINCREMENTINC, COLUMNNAME, REFERENCEID, COLUMNDEFAULT FROM SYS.SYSCOLUMNS WHERE REFERENCEID = '%s' AND COLUMNNAME = '%s'"
|
128
|
+
|
129
|
+
|
130
|
+
def add_quotes(name)
|
131
|
+
return name unless name
|
132
|
+
%Q{"#{name}"}
|
133
|
+
end
|
134
|
+
|
135
|
+
def strip_quotes(str)
|
136
|
+
return str unless str
|
137
|
+
return str unless /^(["']).*\1$/ =~ str
|
138
|
+
str[1..-2]
|
139
|
+
end
|
122
140
|
|
141
|
+
def expand_double_quotes(name)
|
142
|
+
return name unless name && name['"']
|
143
|
+
name.gsub(/"/,'""')
|
144
|
+
end
|
145
|
+
|
146
|
+
def reinstate_auto_increment(name, refid, coldef)
|
147
|
+
stmt = AUTO_INC_STMT % [refid, strip_quotes(name)]
|
148
|
+
data = execute(stmt).first
|
149
|
+
if data
|
150
|
+
start = data['autoincrementstart']
|
151
|
+
if start
|
152
|
+
coldef << " GENERATED " << (data['columndefault'].nil? ? "ALWAYS" : "BY DEFAULT ")
|
153
|
+
coldef << "AS IDENTITY (START WITH "
|
154
|
+
coldef << start
|
155
|
+
coldef << ", INCREMENT BY "
|
156
|
+
coldef << data['autoincrementinc']
|
157
|
+
coldef << ")"
|
158
|
+
return true
|
159
|
+
end
|
160
|
+
end
|
161
|
+
false
|
162
|
+
end
|
163
|
+
|
164
|
+
def create_column(name, refid, colno)
|
165
|
+
stmt = COLUMN_TYPE_STMT % [refid, strip_quotes(name)]
|
166
|
+
coldef = ""
|
167
|
+
data = execute(stmt).first
|
168
|
+
if data
|
169
|
+
coldef << add_quotes(expand_double_quotes(strip_quotes(name)))
|
170
|
+
coldef << " "
|
171
|
+
coldef << data['columndatatype']
|
172
|
+
if !reinstate_auto_increment(name, refid, coldef) && data['columndefault']
|
173
|
+
coldef << " DEFAULT " << data['columndefault']
|
174
|
+
end
|
175
|
+
end
|
176
|
+
coldef
|
177
|
+
end
|
178
|
+
|
179
|
+
def structure_dump #:nodoc:
|
180
|
+
data = ""
|
181
|
+
execute("select tablename, tableid from sys.systables where schemaid not in (select schemaid from sys.sysschemas where schemaname LIKE 'SYS%')").each do |tbl|
|
182
|
+
tid = tbl["tableid"]
|
183
|
+
tname = tbl["tablename"]
|
184
|
+
data << "CREATE TABLE #{tname} (\n"
|
185
|
+
first_col = true
|
186
|
+
execute(COLUMN_INFO_STMT % tid).each do |col|
|
187
|
+
col_name = add_quotes(col['columnname']);
|
188
|
+
create_col_string = create_column(col_name, col['referenceid'],col['columnnumber'].to_i)
|
189
|
+
if !first_col
|
190
|
+
create_col_string = ",\n #{create_col_string}"
|
191
|
+
else
|
192
|
+
create_col_string = " #{create_col_string}"
|
193
|
+
end
|
194
|
+
|
195
|
+
data << create_col_string
|
196
|
+
|
197
|
+
first_col = false
|
198
|
+
end
|
199
|
+
data << ");\n\n"
|
200
|
+
end
|
201
|
+
data
|
202
|
+
end
|
203
|
+
|
123
204
|
# Support for removing columns added via derby bug issue:
|
124
205
|
# https://issues.apache.org/jira/browse/DERBY-1489
|
125
206
|
#
|
@@ -184,6 +265,12 @@ module JdbcSpec
|
|
184
265
|
def primary_keys(table_name)
|
185
266
|
@connection.primary_keys table_name.to_s.upcase
|
186
267
|
end
|
268
|
+
|
269
|
+
def recreate_database(db_name)
|
270
|
+
tables.each do |t|
|
271
|
+
drop_table t rescue nil
|
272
|
+
end
|
273
|
+
end
|
187
274
|
|
188
275
|
# For migrations, exclude the primary key index as recommended
|
189
276
|
# by the HSQLDB docs. This is not a great test for primary key
|
@@ -212,12 +299,7 @@ module JdbcSpec
|
|
212
299
|
end
|
213
300
|
end
|
214
301
|
else
|
215
|
-
|
216
|
-
if vi.to_s == value
|
217
|
-
value
|
218
|
-
else
|
219
|
-
"'#{quote_string(value)}'"
|
220
|
-
end
|
302
|
+
super
|
221
303
|
end
|
222
304
|
else super
|
223
305
|
end
|
@@ -25,7 +25,7 @@ module JdbcSpec
|
|
25
25
|
return value if value.is_a? Time
|
26
26
|
time_array = ParseDate.parsedate value
|
27
27
|
time_array[0] ||= 2000; time_array[1] ||= 1; time_array[2] ||= 1;
|
28
|
-
Time.send(Base.default_timezone, *time_array) rescue nil
|
28
|
+
Time.send(ActiveRecord::Base.default_timezone, *time_array) rescue nil
|
29
29
|
end
|
30
30
|
|
31
31
|
def guess_date_or_time(value)
|
@@ -38,7 +38,7 @@ module JdbcSpec
|
|
38
38
|
time_array[0] ||= 2000
|
39
39
|
time_array[1] ||= 1
|
40
40
|
time_array[2] ||= 1
|
41
|
-
Time.send(Base.default_timezone, *time_array) rescue nil
|
41
|
+
Time.send(ActiveRecord::Base.default_timezone, *time_array) rescue nil
|
42
42
|
end
|
43
43
|
|
44
44
|
def cast_to_datetime(value)
|
@@ -35,7 +35,7 @@ module JdbcSpec
|
|
35
35
|
return value if value.is_a? Time
|
36
36
|
time_array = ParseDate.parsedate value
|
37
37
|
time_array[0] ||= 2000; time_array[1] ||= 1; time_array[2] ||= 1;
|
38
|
-
Time.send(Base.default_timezone, *time_array) rescue nil
|
38
|
+
Time.send(ActiveRecord::Base.default_timezone, *time_array) rescue nil
|
39
39
|
end
|
40
40
|
|
41
41
|
def guess_date_or_time(value)
|
@@ -111,31 +111,6 @@ module JdbcSpec
|
|
111
111
|
select_one("select sys_context('userenv','db_name') db from dual")["db"]
|
112
112
|
end
|
113
113
|
|
114
|
-
def indexes(table_name, name = nil) #:nodoc:
|
115
|
-
result = select_all(<<-SQL, name)
|
116
|
-
SELECT lower(i.index_name) as index_name, i.uniqueness, lower(c.column_name) as column_name
|
117
|
-
FROM user_indexes i, user_ind_columns c
|
118
|
-
WHERE i.table_name = '#{table_name.to_s.upcase}'
|
119
|
-
AND c.index_name = i.index_name
|
120
|
-
AND i.index_name NOT IN (SELECT index_name FROM user_constraints WHERE constraint_type = 'P')
|
121
|
-
ORDER BY i.index_name, c.column_position
|
122
|
-
SQL
|
123
|
-
|
124
|
-
current_index = nil
|
125
|
-
indexes = []
|
126
|
-
|
127
|
-
result.each do |row|
|
128
|
-
if current_index != row['index_name']
|
129
|
-
indexes << IndexDefinition.new(table_name, row['index_name'], row['uniqueness'] == "UNIQUE", [])
|
130
|
-
current_index = row['index_name']
|
131
|
-
end
|
132
|
-
|
133
|
-
indexes.last.columns << row['column_name']
|
134
|
-
end
|
135
|
-
|
136
|
-
indexes
|
137
|
-
end
|
138
|
-
|
139
114
|
def remove_index(table_name, options = {}) #:nodoc:
|
140
115
|
execute "DROP INDEX #{index_name(table_name, options)}"
|
141
116
|
end
|
@@ -16,7 +16,7 @@ module JdbcSpec
|
|
16
16
|
return value if value.is_a? Time
|
17
17
|
time_array = ParseDate.parsedate value
|
18
18
|
time_array[0] ||= 2000; time_array[1] ||= 1; time_array[2] ||= 1;
|
19
|
-
Time.send(Base.default_timezone, *time_array) rescue nil
|
19
|
+
Time.send(ActiveRecord::Base.default_timezone, *time_array) rescue nil
|
20
20
|
end
|
21
21
|
|
22
22
|
def guess_date_or_time(value)
|
Binary file
|
metadata
CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: ActiveRecord-JDBC
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version:
|
6
|
+
version: 0.3.1
|
7
7
|
date: 2007-05-07 00:00:00 -05:00
|
8
8
|
summary: JDBC adapter for ActiveRecord, for use within JRuby on Rails.
|
9
9
|
require_paths:
|