* master:
avoid potential race-condition with closing a connection
add option for setting the wait_timeout in the AR adapter (this can be done in database.yml)
add some more defaults to the connect flags
add connect_flags to default options and add REMEMBER_OPTIONS to that list. fix NUM2INT to be NUM2ULONG as it should be for flags
free the client after close if we can
forgot to remove this
get rid of double-pointer casting
a couple of minor updates to connection management with some specs
check for error from mysql_affected_rows call
change connection check symantecs
* master:
Detach before executing callbacks.
make sure we don't hit a race condition if this EM spec is taking longer to run than normal
was in a hurry earlier
whoops, lost this line in a previous patch
Dry windows configuration options
Inject 1.8/1.9 pure-ruby entry point during xcompile
Use MySQL 5.1.51 now from available mirror
Attempting to escape large, untrusted strings cause stack
overflows (easier under Ruby 1.9 using pthreads) leading to
SystemStackError on small overflows and segmentation faults on
large overflows. Instead of allocating on the stack, we'll
allocate a string buffer from the heap.
This has the unfortunate effect of reducing escape performance
for common cases, but in my experience SQL escaping isn't much
of a bottleneck.
For reference, Ruby 1.9.2-p0 with pthreads gets a stack size of
512K and the default process stack size is 8MB on both x86 and
x86_64 Linux.
This reverts the single-threaded select() optimization from
commits 9a63a587c0 and
0190457dbd.
Under Ruby 1.9, the reverted optimization caused signal handlers
to be delayed until the socket became readable.
Under Ruby 1.8, matters are worse as receiving a signal during
select() causes Errno::EINTR to be raised.
There is now a (somewhat fragile) spec for testing signal
handling during a "SELECT sleep(2)" query.
Furthermore, the performance difference I measured on
benchmark/thread_alone.rb was negligible (over 1000 iterations)
between the two:
Ruby 1.8.7-p249
Rehearsal ----------------------------------------------------
select 0.040000 0.020000 0.060000 ( 0.119448)
rb_thread_select 0.050000 0.020000 0.070000 ( 0.132091)
------------------------------------------- total: 0.130000sec
user system total real
select 0.030000 0.030000 0.060000 ( 0.116471)
rb_thread_select 0.050000 0.020000 0.070000 ( 0.119874)
Ruby 1.9.2-p0
Rehearsal ----------------------------------------------------
select 0.050000 0.030000 0.080000 ( 0.134208)
rb_thread_select 0.080000 0.000000 0.080000 ( 0.141316)
------------------------------------------- total: 0.160000sec
user system total real
select 0.050000 0.020000 0.070000 ( 0.123325)
rb_thread_select 0.060000 0.010000 0.070000 ( 0.124075)
Benchmarks were performed on an _empty_ mysql2_test table to
maximize the relative time for the select(2)-related code path
(vs reading data). The test was run on Debian Lenny, x86_64 and
a stock 2.6.35.2 Linux kernel. Hardware was a Core2 Duo @
1.6GHz with the performance CPU governor while on AC power
to eliminate CPU speed fluctuations during the test.
* master:
remove Sequel adapter as it's now in Sequel core :)
move -Wextra to development flags area
update AR adapter to reflect timezone setting update
application_timezone is allowed to be nil
default application_timezone to nil
sync up with sequel adapter from my Sequel fork until it's officially merged in
convert :timezone option into two new ones :database_timezone - the timezone (:utc or :local) Mysql2 will assume time/datetime fields are stored in the db. This modifies what initial timezone your Time objects will be in when creating them from libmysql in C and :application_timezone - the timezone (:utc or :local) you'd finally like the Time objects converted to before you get them
can't call literal here because it'll try to join it's own thread
Mysql2::Client uses the :username key, set it to :user if that was used instead
heh
fix typo in comment
major refactor of Sequel adapter - it's now green in Sequel
add :cast_booleans option for automatically casting tinyint(1) fields into true/false for ruby
move most previously global symbols to static to prevent conflicts (thanks for catching this Eric)
respect :symbolize_keys option for Mysql2::Result#fields if it's called before the first row is built
initialize @active early on to prevent warnings later
let's try that again - libmysql only allows one query be sent at a time per connection, bail early if that's attempted
Revert "libmysql only allows one query be sent at a time per connection, bail early if that's attempted"
libmysql only allows one query be sent at a time per connection, bail early if that's attempted
no need to carry over options twice as we're already doing it up in rb_mysql_client_async_result
* master:
check for and support field-level encodings
on second thought, we should make sure we were given a string earlier on
no need to Check_Type in these spots since we're using StringValuePtr as well