From 1dc0b2a96095695fabd9210a401484cd5b82146f Mon Sep 17 00:00:00 2001
From: David Heinemeier Hansson <david@loudthinking.com>
Date: Wed, 23 Feb 2005 17:03:12 +0000
Subject: Added documentation for database adapters to visible RDoc

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@771 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
---
 .../connection_adapters/mysql_adapter.rb           | 17 +++++-
 .../connection_adapters/oci_adapter.rb             | 63 ++++++++++++----------
 .../connection_adapters/postgresql_adapter.rb      | 14 ++++-
 .../connection_adapters/sqlite_adapter.rb          | 13 +++--
 .../connection_adapters/sqlserver_adapter.rb       | 38 +++++++------
 5 files changed, 89 insertions(+), 56 deletions(-)

(limited to 'activerecord/lib')

diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
index 1885a4ca95..cf7c700b66 100755
--- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
@@ -41,7 +41,22 @@ module ActiveRecord
   end
  
   module ConnectionAdapters
-    class MysqlAdapter < AbstractAdapter # :nodoc:
+    # The MySQL adapter will work with both Ruby/MySQL, which is a Ruby-based MySQL adapter that comes bundled with Active Record, and with
+    # the faster C-based MySQL/Ruby adapter (available both as a gem and from http://www.tmtm.org/en/mysql/ruby/).
+    #
+    # Options:
+    #
+    # * <tt>:host</tt> -- Defaults to localhost
+    # * <tt>:port</tt> -- Defaults to 3306
+    # * <tt>:socket</tt> -- Defaults to /tmp/mysql.sock
+    # * <tt>:username</tt> -- Defaults to root
+    # * <tt>:password</tt> -- Defaults to nothing
+    # * <tt>:database</tt> -- The name of the database. No default, must be provided.
+    # * <tt>:sslkey</tt> -- Necessary to use MySQL with an SSL connection
+    # * <tt>:sslcert</tt> -- Necessary to use MySQL with an SSL connection
+    # * <tt>:sslcapath</tt> -- Necessary to use MySQL with an SSL connection
+    # * <tt>:sslcipher</tt> -- Necessary to use MySQL with an SSL connection
+    class MysqlAdapter < AbstractAdapter
       LOST_CONNECTION_ERROR_MESSAGES = [ 
         "Server shutdown in progress",
         "Broken pipe", 
diff --git a/activerecord/lib/active_record/connection_adapters/oci_adapter.rb b/activerecord/lib/active_record/connection_adapters/oci_adapter.rb
index eb966fa9bb..8b9b5627e0 100644
--- a/activerecord/lib/active_record/connection_adapters/oci_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/oci_adapter.rb
@@ -1,8 +1,3 @@
-# This is an Oracle adapter for the ActiveRecord persistence framework. It relies upon the OCI8
-# driver, which works with Oracle 8i and above. It was developed on Windows 2000
-# against an 8i database, using ActiveRecord 1.6.0 and OCI8 0.1.9. It has also been tested against
-# a 9i database.
-#
 # Implementation notes:
 # 1.  I had to redefine a method in ActiveRecord to make it possible to implement an autonumbering
 #     solution for oracle. It's implemented in a way that is intended to not break other adapters.
@@ -17,23 +12,6 @@
 #     consistency with other adapters I've allowed the LIMIT and OFFSET clauses to be included in
 #     the sql string and later extracted them by parsing the string.
 #
-# Usage notes:
-# 1.  Key generation uses a sequence "rails_sequence" for all tables. (I couldn't find a simple
-#     and safe way of passing table-specific sequence information to the adapter.)
-# 2.  Oracle uses DATE or TIMESTAMP datatypes for both dates and times. Consequently I have had to
-#     resort to some hacks to get data converted to Date or Time in Ruby.
-#     If the column_name ends in _time it's created as a Ruby Time. Else if the
-#     hours/minutes/seconds are 0, I make it a Ruby Date. Else it's a Ruby Time.
-#     This is nasty - but if you use Duck Typing you'll probably not care very much.
-#     In 9i it's tempting to map DATE to Date and TIMESTAMP to Time but I don't think that is
-#     valid - too many databases use DATE for both.
-#     Timezones and sub-second precision on timestamps are not supported.
-# 3.  Default values that are functions (such as "SYSDATE") are not supported. This is a
-#     restriction of the way active record supports default values.
-# 4.  Referential integrity constraints are not fully supported. Under at least
-#     some circumstances, active record appears to delete parent and child records out of
-#     sequence and out of transaction scope. (Or this may just be a problem of test setup.)
-#
 # Do what you want with this code, at your own peril, but if any significant portion of my code
 # remains then please acknowledge my contribution.
 # Copyright 2005 Graham Jenkins
@@ -44,8 +22,8 @@ begin
   require_library_or_gem 'oci8' unless self.class.const_defined? :OCI8
 
   module ActiveRecord
-    module ConnectionAdapters
-      class OCIColumn < Column
+    module ConnectionAdapters #:nodoc:
+      class OCIColumn < Column #:nodoc:
         attr_reader :sql_type
 
         def initialize(name, default, limit, sql_type, scale)
@@ -92,6 +70,33 @@ begin
         end
       end
 
+      # This is an Oracle adapter for the ActiveRecord persistence framework. It relies upon the OCI8
+      # driver (http://rubyforge.org/projects/ruby-oci8/), which works with Oracle 8i and above. 
+      # It was developed on Windows 2000 against an 8i database, using ActiveRecord 1.6.0 and OCI8 0.1.9. 
+      # It has also been tested against a 9i database.
+      #
+      # Usage notes:
+      # * Key generation uses a sequence "rails_sequence" for all tables. (I couldn't find a simple
+      #   and safe way of passing table-specific sequence information to the adapter.)
+      # * Oracle uses DATE or TIMESTAMP datatypes for both dates and times. Consequently I have had to
+      #   resort to some hacks to get data converted to Date or Time in Ruby.
+      #   If the column_name ends in _time it's created as a Ruby Time. Else if the
+      #   hours/minutes/seconds are 0, I make it a Ruby Date. Else it's a Ruby Time.
+      #   This is nasty - but if you use Duck Typing you'll probably not care very much.
+      #   In 9i it's tempting to map DATE to Date and TIMESTAMP to Time but I don't think that is
+      #   valid - too many databases use DATE for both.
+      #   Timezones and sub-second precision on timestamps are not supported.
+      # * Default values that are functions (such as "SYSDATE") are not supported. This is a
+      #   restriction of the way active record supports default values.
+      # * Referential integrity constraints are not fully supported. Under at least
+      #   some circumstances, active record appears to delete parent and child records out of
+      #   sequence and out of transaction scope. (Or this may just be a problem of test setup.)
+      #
+      # Options:
+      #
+      # * <tt>:username</tt> -- Defaults to root
+      # * <tt>:password</tt> -- Defaults to nothing
+      # * <tt>:host</tt> -- Defaults to localhost
       class OCIAdapter < AbstractAdapter
         def quote_string(s)
           s.gsub /'/, "''"
@@ -202,7 +207,7 @@ begin
 
   module ActiveRecord
     class Base
-      def self.oci_connection(config)
+      def self.oci_connection(config) #:nodoc:
         conn = OCI8.new config[:username], config[:password], config[:host]
         conn.exec %q{alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS'}
         conn.exec %q{alter session set nls_timestamp_format = 'YYYY-MM-DD HH24:MI:SS'}
@@ -214,7 +219,7 @@ begin
       # Enable the id column to be bound into the sql later, by the adapter's insert method.
       # This is preferable to inserting the hard-coded value here, because the insert method
       # needs to know the id value explicitly.
-      def attributes_with_quotes(creating = true)
+      def attributes_with_quotes(creating = true) #:nodoc:
         aq = attributes_with_quotes_pre_oci creating
         if connection.class == ConnectionAdapters::OCIAdapter
           aq[self.class.primary_key] = ":id" if creating && aq[self.class.primary_key].nil?
@@ -225,7 +230,7 @@ begin
       after_save :write_lobs
 
       # After setting large objects to empty, select the OCI8::LOB and write back the data
-      def write_lobs()
+      def write_lobs() #:nodoc:
         if connection.class == ConnectionAdapters::OCIAdapter
           self.class.columns.select { |c| c.type == :binary }.each { |c|
             break unless value = self[c.name]
@@ -242,8 +247,8 @@ begin
     end
   end
 
-  class OCI8
-    class Cursor
+  class OCI8 #:nodoc:
+    class Cursor #:nodoc:
       alias :define_a_column_pre_ar :define_a_column
       def define_a_column(i)
         case do_ocicall(@ctx) { @parms[i - 1].attrGet(OCI_ATTR_DATA_TYPE) }
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
index 934b1e49c9..8b4fb696fc 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -43,8 +43,18 @@ module ActiveRecord
   end
 
   module ConnectionAdapters
-
-    class PostgreSQLAdapter < AbstractAdapter # :nodoc:
+    # The PostgreSQL adapter works both with the C-based (http://www.postgresql.jp/interfaces/ruby/) and the Ruby-base
+    # (available both as gem and from http://rubyforge.org/frs/?group_id=234&release_id=1145) drivers.
+    #
+    # Options:
+    #
+    # * <tt>:host</tt> -- Defaults to localhost
+    # * <tt>:port</tt> -- Defaults to 5432
+    # * <tt>:username</tt> -- Defaults to nothing
+    # * <tt>:password</tt> -- Defaults to nothing
+    # * <tt>:database</tt> -- The name of the database. No default, must be provided.
+    # * <tt>:schema_order</tt> -- An optional schema order string that is using in a SET search_path TO <schema_order> call on connection.
+    class PostgreSQLAdapter < AbstractAdapter
       def select_all(sql, name = nil)
         select(sql, name)
       end
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
index d8f3e04498..4958094ecb 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
@@ -59,9 +59,8 @@ module ActiveRecord
     end
   end
 
-  module ConnectionAdapters
-    
-    class SQLiteColumn < Column
+  module ConnectionAdapters #:nodoc:
+    class SQLiteColumn < Column #:nodoc:
       def string_to_binary(value)
         value.gsub(/(\0|\%)/) do
           case $1
@@ -81,7 +80,13 @@ module ActiveRecord
       end
     end
 
-    class SQLiteAdapter < AbstractAdapter # :nodoc:
+    # The SQLite adapter works with both the 2.x and 3.x series of SQLite with the sqlite-ruby drivers (available both as gems and
+    # from http://rubyforge.org/projects/sqlite-ruby/).
+    #
+    # Options:
+    #
+    # * <tt>:dbfile</tt> -- Path to the database file.
+    class SQLiteAdapter < AbstractAdapter
       def execute(sql, name = nil)
         log(sql, name) { @connection.execute(sql) }
       end
diff --git a/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
index 7bddba9b5b..d221f99be3 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
@@ -5,24 +5,6 @@ require 'active_record/connection_adapters/abstract_adapter'
 # Author: Joey Gibson <joey@joeygibson.com>
 # Date:   10/14/2004
 #
-# REQUIREMENTS:
-#
-# This adapter will ONLY work on Windows systems, since it relies on Win32OLE, which,
-# to my knowledge, is only available on Window.
-#
-# It relies on the ADO support in the DBI module. If you are using the
-# one-click installer of Ruby, then you already have DBI installed, but
-# the ADO module is *NOT* installed. You will need to get the latest
-# source distribution of Ruby-DBI from http://ruby-dbi.sourceforge.net/
-# unzip it, and copy the file src/lib/dbd_ado/ADO.rb to
-# X:/Ruby/lib/ruby/site_ruby/1.8/DBD/ADO/ADO.rb (you will need to create
-# the ADO directory). Once you've installed that file, you are ready to go.
-#
-# This module uses the ADO-style DSNs for connection. For example:
-# "DBI:ADO:Provider=SQLOLEDB;Data Source=(local);Initial Catalog=test;User Id=sa;Password=password;"
-# with User Id replaced with your proper login, and Password with your
-# password.
-#
 # I have tested this code on a WindowsXP Pro SP1 system,
 # ruby 1.8.2 (2004-07-29) [i386-mswin32], SQL Server 2000.
 #
@@ -128,8 +110,24 @@ module ActiveRecord
 
     end
 
-    class SQLServerAdapter < AbstractAdapter # :nodoc:
-
+    # This adapter will ONLY work on Windows systems, since it relies on Win32OLE, which,
+    # to my knowledge, is only available on Window.
+    #
+    # It relies on the ADO support in the DBI module. If you are using the
+    # one-click installer of Ruby, then you already have DBI installed, but
+    # the ADO module is *NOT* installed. You will need to get the latest
+    # source distribution of Ruby-DBI from http://ruby-dbi.sourceforge.net/
+    # unzip it, and copy the file <tt>src/lib/dbd_ado/ADO.rb</tt> to
+    # <tt>X:/Ruby/lib/ruby/site_ruby/1.8/DBD/ADO/ADO.rb</tt> (you will need to create
+    # the ADO directory). Once you've installed that file, you are ready to go.
+    #
+    # Options:
+    #
+    # * <tt>:host</tt> -- Defaults to localhost
+    # * <tt>:username</tt> -- Defaults to sa
+    # * <tt>:password</tt> -- Defaults to nothing
+    # * <tt>:database</tt> -- The name of the database. No default, must be provided.
+    class SQLServerAdapter < AbstractAdapter
       def select_all(sql, name = nil)
         add_limit!(sql, nil)
         select(sql, name)
-- 
cgit v1.2.3