1. 23 9月, 2015 1 次提交
    • Y
      introduce `conn.data_source_exists?` and `conn.data_sources`. · 152b85f0
      Yves Senn 提交于
      These new methods are used from the Active Record model layer to
      determine which relations are viable to back a model. These new methods
      allow us to change `conn.tables` in the future to only return tables and
      no views. Same for `conn.table_exists?`.
      
      The goal is to provide the following introspection methods on the
      connection:
      
      * `tables`
      * `table_exists?`
      * `views`
      * `view_exists?`
      * `data_sources` (views + tables)
      * `data_source_exists?` (views + tables)
      152b85f0
  2. 04 2月, 2015 1 次提交
    • S
      rm `Column#cast_type` · 158c7eb1
      Sean Griffin 提交于
      The type from the column is never used, except when being passed to the
      attributes API. While leaving the type on the column wasn't necessarily
      a bad thing, I worry that it's existence there implies that it is
      something which should be used.
      
      During the design and implementation process of the attributes API,
      there have been plenty of cases where getting the "right" type object
      was hard, but I had easy access to the column objects. For any
      contributor who isn't intimately familiar with the intents behind the
      type casting system, grabbing the type from the column might easily seem
      like the "correct" thing to do.
      
      As such, the goal of this change is to express that the column is not
      something that should be used for type casting. The only places that are
      "valid" (at the time of this commit) uses of acquiring a type object
      from the column are fixtures (as the YAML file is going to mirror the
      database more closely than the AR object), and looking up the type
      during schema detection to pass to the attributes API
      
      Many of the failing tests were removed, as they've been made obsolete
      over the last year. All of the PG column tests were testing nothing
      beyond polymorphism. The Mysql2 tests were duplicating the mysql tests,
      since they now share a column class.
      
      The implementation is a little hairy, and slightly verbose, but it felt
      preferable to going back to 20 constructor options for the columns. If
      you are git blaming to figure out wtf I was thinking with them, and have
      a better idea, go for it. Just don't use a type object for this.
      158c7eb1
  3. 01 2月, 2015 1 次提交
    • S
      Attribute assignment and type casting has nothing to do with columns · 70ac0729
      Sean Griffin 提交于
      It's finally finished!!!!!!! The reason the Attributes API was kept
      private in 4.2 was due to some publicly visible implementation details.
      It was previously implemented by overloading `columns` and
      `columns_hash`, to make them return column objects which were modified
      with the attribute information.
      
      This meant that those methods LIED! We didn't change the database
      schema. We changed the attribute information on the class. That is
      wrong! It should be the other way around, where schema loading just
      calls the attributes API for you. And now it does!
      
      Yes, this means that there is nothing that happens in automatic schema
      loading that you couldn't manually do yourself. (There's still some
      funky cases where we hit the connection adapter that I need to handle,
      before we can turn off automatic schema detection entirely.)
      
      There were a few weird test failures caused by this that had to be
      fixed. The main source came from the fact that the attribute methods are
      now defined in terms of `attribute_names`, which has a clause like
      `return [] unless table_exists?`. I don't *think* this is an issue,
      since the only place this caused failures were in a fake adapter which
      didn't override `table_exists?`.
      
      Additionally, there were a few cases where tests were failing because a
      migration was run, but the model was not reloaded. I'm not sure why
      these started failing from this change, I might need to clear an
      additional cache in `reload_schema_from_cache`. Again, since this is not
      normal usage, and it's expected that `reset_column_information` will be
      called after the table is modified, I don't think it's a problem.
      
      Still, test failures that were unrelated to the change are worrying, and
      I need to dig into them further.
      
      Finally, I spent a lot of time debugging issues with the mutex used in
      `define_attribute_methods`. I think we can just remove that method
      entirely, and define the attribute methods *manually* in the call to
      `define_attribute`, which would simplify the code *tremendously*.
      
      Ok. now to make this damn thing public, and work on moving it up to
      Active Model.
      70ac0729
  4. 18 5月, 2014 1 次提交
    • S
      Add a type object to Column constructor · 4bd5dffc
      Sean Griffin 提交于
      Part of #15134. In order to perform typecasting polymorphically, we need
      to add another argument to the constructor. The order was chosen to
      match the `oid_type` on `PostgreSQLColumn`.
      4bd5dffc
  5. 15 9月, 2012 1 次提交
  6. 16 6月, 2012 1 次提交
  7. 02 2月, 2012 1 次提交
  8. 20 11月, 2011 1 次提交
  9. 05 2月, 2011 1 次提交