Diff
Modified: trunk/activerecord-jdbc/History.txt (847 => 848)
--- trunk/activerecord-jdbc/History.txt 2007-12-15 18:44:05 UTC (rev 847)
+++ trunk/activerecord-jdbc/History.txt 2007-12-15 18:47:20 UTC (rev 848)
@@ -5,6 +5,9 @@
0.6 release.
- Release coincides with JRuby 1.0.3 and JRuby 1.1b2 releases
- Simultaneous support for JRuby trunk and 1.0 branch
+- Get rid of log_no_bench method, so we time SQL execution again.
+- Implement #select_rows
+- MySQL migration and quoting updates
== 0.6
Modified: trunk/activerecord-jdbc/Rakefile (847 => 848)
--- trunk/activerecord-jdbc/Rakefile 2007-12-15 18:44:05 UTC (rev 847)
+++ trunk/activerecord-jdbc/Rakefile 2007-12-15 18:47:20 UTC (rev 848)
@@ -29,6 +29,7 @@
rm_rf FileList['test.db.*']
rm_rf "test/reports"
rm_f FileList['lib/**/*.jar']
+ rm_f "manifest.mf"
end
task :clean => :more_clean
Modified: trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb (847 => 848)
--- trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb 2007-12-15 18:44:05 UTC (rev 847)
+++ trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb 2007-12-15 18:47:20 UTC (rev 848)
@@ -10,7 +10,7 @@
# The original implementation of this had a bug, which modifies native_database_types.
# This version allows us to cache that value.
def type_to_sql(type, limit = nil, precision = nil, scale = nil) #:nodoc:
- native = native_database_types[type]
+ native = native_database_types[type.to_s.downcase.to_sym]
column_type_sql = native.is_a?(Hash) ? native[:name] : native
if type == :decimal # ignore limit, use precison and scale
precision ||= native[:precision]
@@ -171,7 +171,14 @@
def choose_best_types
type_map = {}
- AR_TO_JDBC_TYPES.each_key do |k|
+ @types.each do |row|
+ name = row['type_name'].downcase
+ k = name.to_sym
+ type_map[k] = { :name => name }
+ type_map[k][:limit] = row['precision'].to_i if row['precision']
+ end
+
+ AR_TO_JDBC_TYPES.keys.each do |k|
typerow = choose_type(k)
type_map[k] = { :name => typerow['type_name'].downcase }
case k
@@ -470,19 +477,25 @@
end
def disconnect!
- @connection.disconnect!
+ @connection.disconnect!
end
def select_all(sql, name = nil)
select(sql, name)
end
+ def select_rows(sql, name = nil)
+ rows = []
+ select(sql, name).each {|row| rows << row.values }
+ rows
+ end
+
def select_one(sql, name = nil)
select(sql, name).first
end
def execute(sql, name = nil)
- log_no_bench(sql, name) do
+ log(sql, name) do
_execute(sql,name)
end
end
@@ -542,27 +555,6 @@
def select(sql, name=nil)
execute(sql,name)
end
-
- def log_no_bench(sql, name)
- if block_given?
- if @logger and @logger.level <= Logger::INFO
- result = yield
- log_info(sql, name, 0)
- result
- else
- yield
- end
- else
- log_info(sql, name, 0)
- nil
- end
- rescue Exception => e
- # Log message and raise exception.
- message = "#{e.class.name}: #{e.message}: #{sql}"
-
- log_info(message, name, 0)
- raise ActiveRecord::StatementInvalid, message
- end
end
end
end
Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_hsqldb.rb (847 => 848)
--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_hsqldb.rb 2007-12-15 18:44:05 UTC (rev 847)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_hsqldb.rb 2007-12-15 18:47:20 UTC (rev 848)
@@ -134,7 +134,7 @@
end
def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) #:nodoc:
- log_no_bench(sql,name) do
+ log(sql,name) do
@connection.execute_update(sql)
end
table = sql.split(" ", 4)[2]
Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mysql.rb (847 => 848)
--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mysql.rb 2007-12-15 18:44:05 UTC (rev 847)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mysql.rb 2007-12-15 18:47:20 UTC (rev 848)
@@ -81,6 +81,10 @@
def quote_column_name(name) #:nodoc:
"`#{name}`"
end
+
+ def quote_table_name(name) #:nodoc:
+ quote_column_name(name).gsub('.', '`.`')
+ end
def quoted_true
"1"
@@ -90,6 +94,25 @@
"0"
end
+ def begin_db_transaction #:nodoc:
+ @connection.begin
+ rescue Exception
+ # Transactions aren't supported
+ end
+
+ def commit_db_transaction #:nodoc:
+ @connection.commit
+ rescue Exception
+ # Transactions aren't supported
+ end
+
+ def rollback_db_transaction #:nodoc:
+ @connection.rollback
+ rescue Exception
+ # Transactions aren't supported
+ end
+
+
# SCHEMA STATEMENTS ========================================
def structure_dump #:nodoc:
@@ -101,7 +124,7 @@
select_all(sql).inject("") do |structure, table|
table.delete('Table_type')
- structure += select_one("SHOW CREATE TABLE #{table.to_a.first.last}")["Create Table"] + ";\n\n"
+ structure += select_one("SHOW CREATE TABLE #{quote_table_name(table.to_a.first.last)}")["Create Table"] + ";\n\n"
end
end
@@ -127,28 +150,32 @@
end
def rename_table(name, new_name)
- execute "RENAME TABLE #{name} TO #{new_name}"
+ execute "RENAME TABLE #{quote_table_name(name)} TO #{quote_table_name(new_name)}"
end
def change_column_default(table_name, column_name, default) #:nodoc:
- current_type = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Type"]
+ current_type = select_one("SHOW COLUMNS FROM #{quote_table_name(table_name)} LIKE '#{column_name}'")["Type"]
- execute("ALTER TABLE #{table_name} CHANGE #{column_name} #{column_name} #{current_type} DEFAULT #{quote(default)}")
+ execute("ALTER TABLE #{quote_table_name(table_name)} CHANGE #{quote_column_name(column_name)} #{quote_column_name(column_name)} #{current_type} DEFAULT #{quote(default)}")
end
def change_column(table_name, column_name, type, options = {}) #:nodoc:
- unless options.include?(:default) && !(options[:null] == false && options[:default].nil?)
- options[:default] = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Default"]
+ unless options_include_default?(options)
+ if column = columns(table_name).find { |c| c.name == column_name.to_s }
+ options[:default] = column.default
+ else
+ raise "No such column: #{table_name}.#{column_name}"
+ end
end
-
- change_column_sql = "ALTER TABLE #{table_name} CHANGE #{column_name} #{column_name} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"
+
+ change_column_sql = "ALTER TABLE #{quote_table_name(table_name)} CHANGE #{quote_column_name(column_name)} #{quote_column_name(column_name)} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"
add_column_options!(change_column_sql, options)
execute(change_column_sql)
end
-
+
def rename_column(table_name, column_name, new_column_name) #:nodoc:
- current_type = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Type"]
- execute "ALTER TABLE #{table_name} CHANGE #{column_name} #{new_column_name} #{current_type}"
+ current_type = select_one("SHOW COLUMNS FROM #{quote_table_name(table_name)} LIKE '#{column_name}'")["Type"]
+ execute "ALTER TABLE #{quote_table_name(table_name)} CHANGE #{quote_table_name(column_name)} #{quote_column_name(new_column_name)} #{current_type}"
end
def add_limit_offset!(sql, options) #:nodoc:
@@ -161,9 +188,23 @@
end
end
+ def show_variable(var)
+ res = execute("show variables like '#{var}'")
+ row = res.detect {|row| row["Variable_name"] == var }
+ row && row["Value"]
+ end
+
+ def charset
+ show_variable("character_set_database")
+ end
+
+ def collation
+ show_variable("collation_database")
+ end
+
private
def supports_views?
false
end
end
-end
+end
\ No newline at end of file