= Swift

== Public API

Public API minus the optional stuff like Pool, IdentityMap, Migrations etc.

  Swift
    .setup  #=> Adapter
    .db     #=> Adapter
    .schema #=> [Record, ...]
    .trace

    # Abstract.
    Adapter
      .new           #=> Adapter
      #create        #=> Record or Result
      #delete        #=> Result
      #execute       #=> Result
      #get           #=> Record
      #prepare       #=> Statement
      #update        #=> Record or Result

    # Adapter::Sql
      #begin
      #commit
      #rollback
      #transaction   #=> Adapter
      #ping          #=> true or false
      #close         #=> true or false
      #closed?       #=> true or false
      #escape        #=> String
      #query
      #fileno        #=> Integer
      #result        #=> Result
      #write         #=> Result

    # Concrete.
    DB
      Mysql    < Adapter::Sql
      Postgres < Adapter::Sql
      Sqlite3  < Adapter::Sql

    # Enumerable collection of Record or Hash tuples.
    Result
      .new           #=> Result
      #insert_id     #=> Numeric
      #fields        #=> [Symbol, ...] # Field names identical to .first.keys if rows > 0
      #types         #=> [String, ...] # Type names: boolean, integer, float, numeric, timestamp, date, time, blob, text
      #selected_rows #=> Fixnum
      #affected_rows #=> Fixnum

    Statement
      .new     #=> Statement
      #execute #=> Result

    Record
      .attribute #=> Type
      .create    #=> Record or Result
      .get       #=> Record
      .header    #=> Header
      .load      #=> Record
      .new       #=> Record
      .store     #=> Symbol
      #execute   #=> Result
      #prepare   #=> Statement
      #record    #=> Alias for self.class
      #tuple     #=> Hash
      #update    #=> Record or Result

    # Enumerable collection of Types for Record.
    Header
      .new        #=> Header
      #all        #=> [Type, ...]
      #insertable #=> [Type, ...]
      #keys       #=> [Symbol, ...]
      #new_tuple  #=> Hash
      #push       #=> Type
      #serial     #=> Symbol or nil.
      #updatable  #=> [Type, ...]

    # Abstract.
    Attribute
      .new                   #=> Attribute
      #name                  #=> Symbol
      #field                 #=> Symbol
      #key                   #=> true or false
      #serial                #=> Symbol or nil
      #default               #=> Object
      #define_record_methods

    # Concrete.
    Type
      BigDecimal < Attribute
      Boolean    < Attribute
      Float      < Attribute
      Integer    < Attribute
      IO         < Attribute
      String     < Attribute
      Time       < Attribute # Soon to be DateTime?
