Diff
Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_derby.rb (570 => 571)
--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_derby.rb 2007-05-10 22:28:32 UTC (rev 570)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_derby.rb 2007-05-10 22:39:40 UTC (rev 571)
@@ -17,7 +17,7 @@
"#{name} Load IDs For Limited Eager Loading"
).collect { |row| connection.quote(row[primary_key], columns_hash[primary_key]) }.join(", ")
end
- end
+ end
@already_monkeyd = true
end
@@ -36,13 +36,17 @@
return nil if value.nil? || value =~ /^\s*null\s*$/i
case type
when :string then value
+ when :text then value
when :integer then defined?(value.to_i) ? value.to_i : (value ? 1 : 0)
when :primary_key then defined?(value.to_i) ? value.to_i : (value ? 1 : 0)
+ when :decimal then self.class.value_to_decimal(value)
when :float then value.to_f
when :datetime then cast_to_date_or_time(value)
+ when :date then self.class.string_to_date(value)
when :timestamp then cast_to_time(value)
when :binary then value.scan(/[0-9A-Fa-f]{2}/).collect {|v| v.to_i(16)}.pack("C*")
when :time then cast_to_time(value)
+ when :boolean then self.class.value_to_boolean(value)
else value
end
end
@@ -104,8 +108,8 @@
# Set the sequence to the max value of the table's column.
def reset_sequence!(table, column, sequence = nil)
- mpk = select_value("SELECT MAX(#{column}) FROM #{table}")
- execute("ALTER TABLE #{table} ALTER COLUMN #{column} RESTART WITH #{mpk.to_i + 1}")
+ mpk = select_value("SELECT MAX(#{quote_column_name column}) FROM #{table}")
+ execute("ALTER TABLE #{table} ALTER COLUMN #{quote_column_name column} RESTART WITH #{mpk.to_i + 1}")
end
def reset_pk_sequence!(table, pk = nil, sequence = nil)
@@ -345,6 +349,8 @@
def quote_column_name(name) #:nodoc:
if /^references$/i =~ name
%Q{"#{name.upcase}"}
+ elsif /[A-Z]/ =~ name && /[a-z]/ =~ name
+ %Q{"#{name}"}
elsif name =~ /\s/
%Q{"#{name.upcase}"}
else
Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb (570 => 571)
--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb 2007-05-10 22:28:32 UTC (rev 570)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb 2007-05-10 22:39:40 UTC (rev 571)
@@ -10,6 +10,8 @@
when :float then value.to_f
when :datetime then cast_to_date_or_time(value)
when :time then cast_to_time(value)
+ when :decimal then self.class.value_to_decimal(value)
+ when :boolean then self.class.value_to_boolean(value)
else value
end
end
Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/missing_functionality_helper.rb (570 => 571)
--- trunk/activerecord-jdbc/lib/jdbc_adapter/missing_functionality_helper.rb 2007-05-10 22:28:32 UTC (rev 570)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/missing_functionality_helper.rb 2007-05-10 22:39:40 UTC (rev 571)
@@ -3,12 +3,12 @@
#Taken from SQLite adapter
def alter_table(table_name, options = {}) #:nodoc:
- table_name = table_name.downcase
+ table_name = table_name.to_s.downcase
altered_table_name = "altered_#{table_name}"
caller = lambda {|definition| yield definition if block_given?}
transaction do
- move_table(table_name, altered_table_name)
+ move_table(table_name, altered_table_name, options)
move_table(altered_table_name, table_name, &caller)
end
end
@@ -25,7 +25,7 @@
(options[:rename][column.name] ||
options[:rename][column.name.to_sym] ||
column.name) : column.name
-
+ column_name = column_name.to_s
@definition.column(column_name, column.type,
:limit => column.limit, :default => column.default,
:null => column.null)
Modified: trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java (570 => 571)
--- trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java 2007-05-10 22:28:32 UTC (rev 570)
+++ trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java 2007-05-10 22:39:40 UTC (rev 571)
@@ -226,6 +226,8 @@
}
}
+ private static final java.util.regex.Pattern HAS_SMALL = java.util.regex.Pattern.compile("[a-z]");
+ private static final java.util.regex.Pattern HAS_LARGE = java.util.regex.Pattern.compile("[A-Z]");
private static IRubyObject unmarshal_columns(IRubyObject recv, DatabaseMetaData metadata, ResultSet rs) throws SQLException, IOException {
List columns = new ArrayList();
boolean isDerby = metadata.getClass().getName().indexOf("derby") != -1;
@@ -238,7 +240,7 @@
while(rs.next()) {
String column_name = rs.getString(4);
- if(metadata.storesUpperCaseIdentifiers()) {
+ if(metadata.storesUpperCaseIdentifiers() && !HAS_SMALL.matcher(column_name).find()) {
column_name = column_name.toLowerCase();
}
@@ -305,7 +307,11 @@
List keyNames = new ArrayList();
Ruby runtime = recv.getRuntime();
while(result_set.next()) {
- keyNames.add(runtime.newString(result_set.getString(4).toLowerCase()));
+ String s1 = result_set.getString(4);
+ if(metadata.storesUpperCaseIdentifiers() && !HAS_SMALL.matcher(s1).find()) {
+ s1 = s1.toLowerCase();
+ }
+ keyNames.add(runtime.newString(s1));
}
try {
@@ -443,12 +449,11 @@
int[] col_scale = new int[col_count];
for(int i=0;i<col_count;i++) {
- if(storesUpper) {
- col_names[i] = runtime.newString(metadata.getColumnName(i+1).toLowerCase());
- } else {
- col_names[i] = runtime.newString(metadata.getColumnName(i+1));
+ String s1 = metadata.getColumnName(i+1);
+ if(storesUpper && !HAS_SMALL.matcher(s1).find()) {
+ s1 = s1.toLowerCase();
}
-
+ col_names[i] = runtime.newString(s1);
col_types[i] = metadata.getColumnType(i+1);
col_scale[i] = metadata.getScale(i+1);
}