Commit Graph

4041 Commits

Author SHA1 Message Date
Guillermo Iguaran
0168c7a394 Add tests for ForbiddenAttributesProtection in ActiveRecord 2012-09-16 23:58:19 -05:00
Guillermo Iguaran
8020f71df1 Remove mass assignment security from ActiveRecord 2012-09-16 23:58:19 -05:00
Rafael Mendonça França
beaac33f9f Merge pull request #7547 from danmcclain/pg-arrays
Adds migration and type casting support for PostgreSQL Array datatype
2012-09-16 20:07:28 -07:00
Rafael Mendonça França
9ae79af042 Merge pull request #7651 from steveklabnik/issue_3956
Don't preserve SELECT columns on COUNT

Closes #7651
2012-09-16 23:27:19 -03:00
Steve Klabnik
9fa3f10281 Don't preserve SELECT columns on COUNT
The COUNT clause of a finder_sql relationship is being rewritten from
COUNT(*) to COUNT(table_name.*). This does not appear to be valid syntax
in MySQL:

```
mysql> SELECT COUNT( table_name.* ) FROM `table_name`;
ERROR 1064 (42000): You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near '* ) FROM `table_name`' at line 1
```

This fixes the bug, as well as adding tests so we don't re-introduce
it in the future.

Fixes #3956.
2012-09-16 23:20:39 -03:00
kennyj
5bb056d268 Don't explain except normal CRUD sql. 2012-09-17 00:22:34 +09:00
Toshiyuki Kawanishi
761bc751d3 Fix find_in_batches with customized primary_key 2012-09-16 20:02:23 +09:00
Rafael Mendonça França
1b7894c95b Merge pull request #7643 from steveklabnik/deprecate_silence
Deprecate ActiveSupport::Benchmarkable#silence.
2012-09-15 05:57:08 -07:00
Steve Klabnik
ed2fea908a Deprecate ActiveSupport::Benchmarkable#silence.
Due to its lack of thread safety, we're deprecating this, and it
will be removed in Rails 4.1.

Fixes #4060.
2012-09-15 06:19:55 +04:00
Jon Leighton
60c88e64e2 Fix test
Accidentally checked in commented test code. Fail. >_<
2012-09-15 00:41:56 +01:00
Jon Leighton
02f56554d6 Ensure disconnecting or reconnecting resets the transaction state 2012-09-15 00:03:04 +01:00
Jon Leighton
6195142790 Remove our use of #outside_transaction?
This method was first seen in 045713ee240fff815edb5962b25d668512649478,
and subsequently reimplemented in
fb2325e35855d62abd2c76ce03feaa3ca7992e4f.

According to @jeremy, this is okay to remove. He thinks it was added
because at the time we didn't have much transaction state to keep track
of, and he viewed it as a hack for us to track it internally, thinking
it was better to ask the connection for the transaction state.

Over the years we have added more and more state to track, a lot of
which is impossible to ask the connection for. So it seems that this is
just a relic of the passed and we will just track the state internally
only.
2012-09-15 00:02:59 +01:00
Jon Leighton
748052a99b Remove the transaction_open variable 2012-09-15 00:00:50 +01:00
Jon Leighton
280587588a Move transaction joinability into the transaction object 2012-09-15 00:00:50 +01:00
Jon Leighton
02f25a226f Start to tease out transaction handling into a state machine 2012-09-15 00:00:50 +01:00
Dan McClain
4544d2bc90 Moves column dump specific code to a module included in AbstractAdapter
Having column related schema dumper code in the AbstractAdapter. The
code remains the same, but by placing it in the AbstractAdapter, we can
then overwrite it with Adapter specific methods that will help with
Adapter specific data types.

The goal of moving this code here is to create a new migration key for
PostgreSQL's array type. Since any datatype can be an array, the goal is
to have ':array => true' as a migration option, turning the datatype
into an array. I've implemented this in postgres_ext, the syntax is
shown here: https://github.com/dockyard/postgres_ext#arrays

Adds array migration support

Adds array_test.rb outlining the test cases for array data type
Adds pg_array_parser to Gemfile for testing
Adds pg_array_parser to postgresql_adapter (unused in this commit)

Adds schema dump support for arrays

Adds postgres array type casting support

Updates changelog, adds note for inet and cidr support, which I forgot to add before

Removing debugger, Adds pg_array_parser to JRuby platform

Removes pg_array_parser requirement, creates ArrayParser module used by
PostgreSQLAdapter
2012-09-14 08:43:47 -04:00
Matt Jones
46873aeded refactor store_accessor 2012-09-13 10:12:11 -04:00
Jon Leighton
eb4a623d74 Fix nested association references
Previously the reflection would be looked up on the wrong class. However
the test passed because the examples referred back to themselves.
2012-09-12 23:32:50 +01:00
Jon Leighton
b5aed34c44 Merge pull request #7273 from beerlington/foreign_key_model_queries
Convert model name to foreign key in queries
2012-09-12 14:04:11 -07:00
Grace Liu
148c50b49a fixed support for DATABASE_URL for rake db tasks
- added tests to confirm establish_connection uses DATABASE_URL and
  Rails.env correctly even when no arguments are passed in.
- updated rake db tasks to support DATABASE_URL, and added tests to
  confirm correct behavior for these rake tasks.  (Removed
  establish_connection call from some tasks since in those cases
  the :environment task already made sure the function would be called)
- updated Resolver so that when it resolves the database url, it
  removes hash values with empty strings from the config spec (e.g.
  to support connection to postgresql when no username is specified).
2012-09-11 20:40:13 -07:00
Aaron Patterson
b4b5971ff7 Merge pull request #7601 from jrochkind/connection_pool_unify_exceptions
ConnectionPool, unify exceptions, ConnectionTimeoutError
2012-09-11 14:29:07 -07:00
beerlington
3da275c439 Accept belongs_to assoc. keys in ActiveRecord queries
Allows you to specify the model association key in a belongs_to
relationship instead of the foreign key.

The following queries are now equivalent:

Post.where(:author_id => Author.first)
Post.where(:author => Author.first)

PriceEstimate.where(:estimate_of_type => 'Treasure', :estimate_of_id => treasure)
PriceEstimate.where(:estimate_of => treasure)
2012-09-11 14:11:51 -04:00
kennyj
df9e135281 Use configuration['encoding'], because database configuration use not charset but encoding. 2012-09-12 02:54:56 +09:00
kennyj
ccc6910cb0 Use native mysqldump command for 'rake db:structure:dump'. 2012-09-12 02:17:04 +09:00
Jonathan Rochkind
5b7cfc5eea ConnectionPool, unify exceptions, ConnectionTimeoutError
As a result of different commits, ConnectionPool had become
of two minds about exceptions, sometimes using PoolFullError
and sometimes using ConnectionTimeoutError. In fact, it was
using ConnectionTimeoutError internally, but then recueing
and re-raising as a PoolFullError.

There's no reason for this bifurcation, standardize on
ConnectionTimeoutError, which is the rails2 name and still
accurately describes semantics at this point.

History

In Rails2, ConnectionPool raises a ConnectionTimeoutError if
it can't get a connection within timeout.

Originally in master/rails3, @tenderlove had planned on removing
wait/blocking in connectionpool entirely, at that point he changed
exception to PoolFullError.

But then later wait/blocking came back, but exception remained
PoolFullError.

Then in 02b233556377 pmahoney introduced fair waiting logic, and
brought back ConnectionTimeoutError, introducing the weird bifurcation.

ConnectionTimeoutError accurately describes semantics as of this
point, and is backwards compat with rails2, there's no reason
for PoolFullError to be introduced, and no reason for two
different exception types to be used internally, no reason
to rescue one and re-raise as another.  Unify!
2012-09-11 10:38:27 -04:00
kennyj
a3024f8122 Fix annoy warning, when executing testcase. 2012-09-11 00:17:08 +09:00
Ernie Miller
4f107da4ff Raise MissingAttributeError on query methods
When calling a query method on an attribute that was not selected by
an ActiveRecord query, an ActiveModel::MissingAttributeError is not
raised. Instead, a nil value is returned, which will return false once
cast to boolean.

This is undesirable, as we should not give the impression that we know
the attribute's boolean value when we haven't loaded the attribute's
(possibly) non-boolean value from the database.

This issue is present on versions going back as far as 2.3, at least.
2012-09-08 17:40:01 -04:00
Konstantin Shabanov
b485b8a066 Dump schema using new style hash 2012-09-08 11:09:49 +04:00
Aaron Patterson
f41dba27a4 Merge pull request #7545 from senny/7518_postgres_type_detection
postgres, map scaled intervals to string datatype
2012-09-07 11:07:09 -07:00
Carlos Antonio da Silva
ba4a6c296e Fix AR tests due to builder change with nil values / empty strings
Check 0180e090ab6cbe66f7b521a0c03e278a0463accd for more reasoning about
that.
2012-09-07 13:31:28 -03:00
Jon Leighton
e20a790b9e Merge pull request #4976 from kreynolds/fix_eager_without_pkey
Fix eagerly loading associations without primary keys
2012-09-07 02:11:21 -07:00
Yves Senn
319482d8fe postgres, map scaled intervals to string datatype (#7518) 2012-09-06 18:01:34 +02:00
Rafael Mendonça França
4fa2f10494 Put the create_table block in a transaction.
This will solve the issue that abort the connection transaction when we
skip the tests.
2012-09-05 23:53:10 -03:00
Dickson S. Guedes
3b516b5beb ActiveRecord support to PostgreSQL 9.2 JSON type
This implements the support to encode/decode JSON
data to/from database and creating columns of type
JSON using a native type [1] supported by PostgreSQL
from version 9.2.

[1] http://www.postgresql.org/docs/9.2/static/datatype-json.html
2012-09-05 22:39:43 -03:00
Rafael Mendonça França
2197d61c69 Merge pull request #7532 from al2o3cr/fix_store_bugs
correct handling of changes in AR::Store, combine multiple store_accessors
2012-09-05 15:33:48 -07:00
Rafael Mendonça França
ebc4d8cede Merge pull request #7536 from pivotal/fix_pluck_with_reserved_words
Fix pluck when columns/tables are reserved words.
2012-09-05 15:30:01 -07:00
Ian Lesperance
c7d752fe2f Fix pluck when columns/tables are reserved words. 2012-09-05 18:00:07 -04:00
Rafael Mendonça França
fdcbc560ab Merge pull request #7525 from seamusabshere/use-mysql-binary-for-rake-db-structure-load
Use the 'mysql' binary for 'rake db:structure:load'
2012-09-05 14:48:19 -07:00
Seamus Abshere
ece23b5fa0 Use the 'mysql' binary for 'rake db:structure:load'.
The previous implementation had the strange requirement that db/structure.sql contain only CREATE TABLE sql statements, one per table, separated by double newlines. SQLite3 and PostgreSQL database tasks, on the other hand, simply spawn 'sqlite3' and 'psql' binaries to load the file directly. The new implementation follows this and attempts to respect all current MySQL configuration settings.
2012-09-05 11:10:15 -05:00
Matt Jones
20f943ffd8 correctly flag changed attributes in AR::Store, combine multiple calls to store_accessor 2012-09-05 11:01:26 -04:00
Rafael Mendonça França
91183baa6d Merge pull request #7337 from adzap/string_to_dummy_time
Fix for time type columns with invalid time value
2012-09-05 06:26:53 -07:00
Rafael Mendonça França
9e0a14f5e2 Merge pull request #7447 from etehtsea/postgresql-adapter
Modularize postgresql adapter
2012-09-05 06:03:09 -07:00
Adam Meehan
ce7cdb9072 Fix for time type columns with invalid time
The string_to_dummy_time method was blindly parsing the dummy time string
with Date._parse which returns a hash for the date part regardless
of whether the time part is an invalid time string.
2012-09-05 21:05:04 +10:00
Konstantin Shabanov
232d2223eb Modularize postgresql adapter 2012-09-05 15:17:45 +07:00
Yves Senn
9f494a9a34 test cleanup, remove ruby_type because it's no longer needed
All tests with a custom inheritance_column use the `Vegtable` model.
The field ruby_type on the Company models is no longer needed
2012-09-03 20:38:14 +02:00
Yves Senn
77ca2815f5 rewrite inheritance tests with a custom inheritance_column
previously the tests with and without a custom `inheritance_column`
used the same models. Since the model then has both fields this can lead
to false positives.
2012-09-03 20:30:43 +02:00
Yves Senn
20574956d1 set the configured #inheritance_column on #become (#7503)
I had to create a new table because I needed an STI table,
which does not have both a "type" and a "custom_type"

the test fails with:
  1) Error:
test_alt_becomes_works_with_sti(InheritanceTest):
NoMethodError: undefined method `type=' for #<Cabbage id: 1, name: "my cucumber", custom_type: "Cucumber">
    /Users/username/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:432:in `method_missing'
    /Users/username/Projects/rails/activerecord/lib/active_record/attribute_methods.rb💯in `method_missing'
    /Users/username/Projects/rails/activerecord/lib/active_record/persistence.rb:165:in `becomes'
    test/cases/inheritance_test.rb:134:in `test_becomes_works_with_sti'
    test/cases/inheritance_test.rb:140:in `test_alt_becomes_works_with_sti'
2012-09-03 16:08:16 +02:00
Jon Leighton
86c3dfbd47 Key the attributes hash with symbols
This is a performance/GC optimisation.

In theory, this could be optimised by the implementation (last time I
checked, this would have no effect on JRuby). But in practise, this make
attribute access faster.
2012-08-31 16:55:08 +01:00
Jon Leighton
e96558f813 Cache the connection pool for a given class 2012-08-31 15:56:28 +01:00
Jon Leighton
221571beb6 Make connection pool retrieval faster
* Loop rather than recurse in retrieve_connection_pool
* Key the hash by class rather than class name. This avoids creating
  unnecessary strings.
2012-08-31 15:56:27 +01:00