Commit Graph

304 Commits

Author SHA1 Message Date
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 10222fb455 appease the rdoc.info godz 2010-08-24 20:59:17 -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
Luis Lavena 4f9625f877 Wrap fcntl to exclude Windows.
Naive implementation, get it compiled but crashes.
2010-08-23 11:59:11 -07:00
Luis Lavena b3ec7b57de Bumped MySQL version 5.1.50 for Windows
And also cleanup compiled extension when 'rake clean'
2010-08-23 11:59:02 -07:00
Brian Lopez 17cabf5559 update files for 0.2.3 release 2010-08-20 20:24:00 -07:00
Brian Lopez 15da806495 Version bump to 0.2.3 2010-08-20 20:23:38 -07:00
Brian Lopez dd5f563554 make sure we respect application_timezone for DateTime values as well 2010-08-20 15:13:08 -07:00
Brian Lopez e56c79894c fix compiler warning 2010-08-20 12:08:29 -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
Aaron Patterson c5f2eb7f3f adding FOUND_ROWS to the client flags 2010-08-20 10:14:49 -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
Brian Lopez 4935931431 update files for 0.2.2 release 2010-08-19 16:03:43 -07:00
Brian Lopez 554837a932 Version bump to 0.2.2 2010-08-19 16:03:29 -07:00
Eric Wong 8e81dcb053 retry connect if interrupted by signals
The MySQL client libraries normally retry system calls when
interrupted by signals.  The lone exception I've found is in the
(infrequent) connection setup where it'll propagate the
connect(2) syscall error all the way back up to the caller.
Fortunately inspection of the MySQL client library reveals it
properly preserves the global "errno" variable even with
debugging enabled.

Note that the net.last_errno member does NOT correspond to the
system "errno".
2010-08-19 15:55:32 -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 d990f68320 slight refactor of how initial commands were being sent 2010-08-18 12:50:03 -07:00
Brian Lopez 60c33be87c multiple variable assignments can done in a single query 2010-08-17 22:55:31 -07:00
Brian Lopez d962ef2583 update files for 0.2.1 release 2010-08-16 14:47:17 -07:00
Brian Lopez dd23e2c880 Version bump to 0.2.1 2010-08-16 14:46:54 -07:00
Brian Lopez e87427abe4 change AR adapter instructions back 2010-08-16 14:45:26 -07:00
Brian Lopez 95fb97dc2b add AR mysql2 adatper back 2010-08-16 14:43:48 -07:00
Brian Lopez 164ad07332 referenced the wrong issue # 2010-08-16 12:39:53 -07:00
Brian Lopez 91671e0d9a update files for 0.2.0 release 2010-08-16 12:38:08 -07:00
Brian Lopez ed4841e29c Version bump to 0.2.0 2010-08-16 12:25:54 -07:00
Brian Lopez cebf9af068 Wrap the MYSQL* again so we can:
1) let mysql_init/mysql_close take care of any/all allocation, thread state and freeing
2) for faster access to the encoding and active state variables for the connection
2010-08-16 02:03:19 -07:00
Brian Lopez 3239a449b9 move and slightly refactor benchmark rake task 2010-08-11 11:29:10 -07:00
Lourens Naudé 10ee025647 Benchmark for select VS rb_thread_select 2010-08-11 11:25:20 -07:00
Lourens Naudé 2609783aeb Avoid INT2NUM overhead when coercing date specific elements for MYSQL_TYPE_TIME + introduce basic infrastructure for measuring GC overhead 2010-08-11 11:25:20 -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é c808e78028 Intern error_number= && sql_state= as well 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
Lourens Naudé 9f19b958b0 Add a threaded example as well 2010-08-11 11:25:20 -07:00
Lourens Naudé 9a63a587c0 Declare the selector function pointer as per ISO C90 spec + address brian's concern / comment re. rb_thread_alone() 2010-08-11 11:25:20 -07:00
Lourens Naudé 0190457dbd Skip rb_thread_select overhead if we're running in single threaded mode 2010-08-11 11:25:20 -07:00
Lourens Naudé 80810f7e43 Extract a GET_CLIENT mactro to cleanup inline Data_Get_Struct etc. on methods that require client access 2010-08-11 11:25:20 -07:00
Lourens Naudé f601c3cef8 Skip additional string length access in rb_mysql_client_escape and benchmark escaping "clean" strings as well 2010-08-11 11:25:20 -07:00
Lourens Naudé 931765ee05 Extract a GET_ENCODING macro 2010-08-11 11:25:20 -07:00
Lourens Naudé e250e337cf Define rake tasks for running benchmarks 2010-08-11 11:25:20 -07:00
Lourens Naudé b15ddc4f75 Let spec be the default rake task 2010-08-11 11:24:45 -07:00
Luis Lavena db64470831 Quick hack from mysql gem.
Added vendored MySQL.
2010-08-12 02:19:24 +08:00
Luis Lavena 5fb043b4da Require a newer rake-compiler for cross-compilation. 2010-08-12 02:19:14 +08:00
Luis Lavena 4c27a1e4fc extconf detect properly mingw. 2010-08-12 02:19:04 +08: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 0bab31a61f mysql2 adapter moved into AR3 core 2010-08-09 14:52:45 -07:00
Brian Lopez 5a9ca9c76f app_timezone defaults to nil 2010-08-09 14:50:58 -07:00
Brian Lopez c3c5c8f85a update gemspec now that the Sequel adapter is gone 2010-08-06 17:05:53 -07:00
Brian Lopez 7bf9889103 remove Sequel adapter as it's now in Sequel core :) 2010-08-06 12:47:25 -07:00