Commit Graph

80 Commits

Author SHA1 Message Date
Brian Lopez
6c4fd8a9ca merging in latest from master 2010-10-17 17:43:24 -07:00
Brian Lopez
410e914411 only run the EM specs if EM is installed 2010-10-17 17:34:34 -07:00
Brian Lopez
22c9ff48a8 some more rspec2 changes, organize rake tasks 2010-10-17 16:51:14 -07:00
Brian Lopez
ba4f3612b6 move to rspec2 2010-10-17 16:34:09 -07:00
Brian Lopez
ddcd1064cd Merge branch 'master' into stmt
* 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
2010-10-15 16:19:11 -07:00
Brian Lopez
c394122fd9 add some more defaults to the connect flags 2010-10-14 23:38:25 -07:00
Brian Lopez
a17ba07c75 a couple of minor updates to connection management with some specs 2010-10-06 10:33:52 -07:00
Brian Lopez
7b6d210c97 Merge branch 'master' into stmt
* 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
2010-10-05 17:14:45 -07:00
Anton Mironov
687487d5a5 Detach before executing callbacks.
This allows to make queries in callbacks.
2010-09-28 13:47:19 +08:00
Brian Lopez
2ae908c512 make sure we don't hit a race condition if this EM spec is taking longer to run than normal 2010-09-27 13:25:10 -07:00
Brian Lopez
39a28c4a91 Merge branch 'master' into stmt 2010-09-24 14:39:21 -07:00
Brian Lopez
98fbeb6f64 add aliases for Mysql compatibility 2010-09-01 11:42:16 -07:00
Brian Lopez
ae6c33a13f add cache_rows option to enable/disable internal row caching for results 2010-08-27 12:08:48 -07:00
Brian Lopez
3b2e7602a0 formatting fix so I collapse in TM 2010-08-24 09:27:29 -07:00
Eric Wong
1100288eba avoid stack overflow when escaping large strings
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.
2010-08-24 05:24:35 +00:00
Brian Lopez
39ea9c6bdb Merge branch 'master' into stmt 2010-08-20 20:24:37 -07:00
Brian Lopez
a19888e939 Make sure we switch over to the DateTime class for DATETIME/TIMESTAMP columns that are out of the supported range for 32bit platforms 2010-08-20 12:07:27 -07:00
Brian Lopez
9a84f88d90 Merge branch 'master' into stmt 2010-08-20 10:07:26 -07:00
Aaron Patterson
ce77899848 connection flags can be passed to the constructor 2010-08-20 09:56:36 -07:00
Aaron Patterson
864cf0f291 exposing client flags 2010-08-20 09:36:15 -07:00
Eric Wong
8bfbfa2708 fix signal handling when waiting on queries
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.
2010-08-18 20:13:13 -07:00
Brian Lopez
731b456862 bring over latest from master 2010-08-16 02:10:10 -07:00
Lourens Naudé
d9153b82fc Save on coercion overhead for zero value decimal and float column values 2010-08-11 11:25:20 -07:00
Lourens Naudé
c5d9b7ff65 Introduce test case for Mysql2::Client in multi-threaded environments 2010-08-11 11:25:20 -07:00
Brian Lopez
254f42f502 no need for AR specs since the adapter was moved to Rails core 2010-08-09 22:11:47 -07:00
Brian Lopez
8aa1e9bb65 Merge branch 'master' into stmt
* 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
2010-08-06 12:47:50 -07:00
Brian Lopez
2514fafa53 add :cast_booleans option for automatically casting tinyint(1) fields into true/false for ruby 2010-08-05 00:39:11 -07:00
Brian Lopez
c0cf2f13a0 let's try that again - libmysql only allows one query be sent at a time per connection, bail early if that's attempted 2010-08-03 20:37:49 -07:00
Brian Lopez
ee4fd98611 Merge branch 'master' into stmt 2010-08-02 10:04:07 -07:00
Brian Lopez
5f81996122 fixes for 1.9 2010-08-02 02:07:11 -07:00
Brian Lopez
fc6c24a20c add support for configuring which timezone Time objects should be created in 2010-08-02 01:20:03 -07:00
Brian Lopez
36c243be71 Add cascading options hash at Mysql2::Client.default_query_options, which can be overridden by passing options to Mysql2::Client#query and/or Mysql2::Result#each
Tune up specs, benchmarks and AR adapter to conform
2010-08-01 20:20:48 -07:00
Brian Lopez
d20bc8dc8b bring in latest from master (specifically the split out of Mysql2::Result into it's own C file) 2010-07-30 13:58:48 -07:00
Brian Lopez
9eb3917328 get rid of some warnings 2010-07-29 23:22:42 -07:00
Brian Lopez
c614c89216 remove spec checking for exception raised when closing a closed connection as we don't do that anymore 2010-07-21 13:14:43 -07:00
Brian Lopez
cd1a2bf9ff Revert "force reconnect behavior to true, remove open connection checks since libmysql will handle this for us now"
This reverts commit 70a7298dc3.
2010-07-21 12:13:27 -07:00
Brian Lopez
70a7298dc3 force reconnect behavior to true, remove open connection checks since libmysql will handle this for us now 2010-07-21 11:47:16 -07:00
Aaron Patterson
c7515a3e46 Merge branch 'master' into stmt
* 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
2010-07-12 08:45:50 -07:00
Brian Lopez
edb742fee7 check for and support field-level encodings
raise an exception for invalid encodings passed to Mysql2::Client#new
2010-07-10 23:15:54 -07:00
Aaron Patterson
45adf1e23b prepared statements can pull times 2010-07-09 11:11:31 -07:00
Aaron Patterson
d510ff675e returning ints from prepared statements works 2010-07-09 11:11:31 -07:00
Aaron Patterson
9b1789fbfc adding Stmt#fields 2010-07-09 11:11:31 -07:00
Aaron Patterson
a3cdd92a9c execute raises an exception on error 2010-07-09 11:11:31 -07:00
Aaron Patterson
7e95b543c9 execute is defined on statmenet 2010-07-09 11:11:31 -07:00
Aaron Patterson
2c86f9d72a prepared statements will tell us the field count 2010-07-09 11:11:31 -07:00
Aaron Patterson
a5d8a087a7 statements can count parameters 2010-07-09 11:11:31 -07:00
Aaron Patterson
2ad51dcac2 we can prepare statements! 2010-07-09 11:11:31 -07:00
Brian Lopez
e385e7cf6b Initial refactor of encoding support to ensure we map Ruby encodings to MySQL encodings properly. 2010-07-08 22:22:20 -07:00
Aaron Patterson
a265d36571 spec helper is in the load path, so no need for expand_path funny business 2010-07-06 15:41:44 -07:00
Aaron Patterson
04b9fe17cc made extension more rake-compiler friendly, made the spec task depend on "compile" 2010-06-30 08:20:42 +08:00