Commit Graph

149 Commits

Author SHA1 Message Date
Brian Lopez
60b8d061ac mysql_errno returns an unsigned int 2010-10-31 12:24:27 -07:00
Brian Lopez
2b37ace3dc only set binary ruby encoding on fields that have a binary flag *and* encoding set 2010-10-31 12:11:20 -07:00
Brian Lopez
1057f976d0 ensure the query is a string earlier in the Mysql2::Client#query codepath for 1.9 2010-10-31 10:11:59 -07:00
Anko painting
e7dcf37bd4 fix to CFLAGS to allow compilation on SPARC with sunstudio compiler 2010-10-18 18:33:34 -07:00
Brian Lopez
a8041fed21 no need to invalidate the FD now that we're only modifying it once, in one place 2010-10-17 18:13:04 -07:00
Brian Lopez
e823b9ec0d no need to check if the FD is >= 0 now that we centralized the close/free logic. Once closed, none of that code will run again 2010-10-17 18:12:02 -07:00
Brian Lopez
3c6959a8bb prevent the GC from freeing a connection that hasn't been allocated yet 2010-10-17 17:35:41 -07:00
Brian Lopez
0ae583fe64 since we free the connection on close, there's no reason to have both flags 2010-10-17 16:59:50 -07:00
Brian Lopez
0a7e7ee475 centralize closing and freeing logic for connections 2010-10-17 16:34:49 -07:00
Brian Lopez
841ee2bba4 make sure we invalidate the closed FD in case it's value is reused on a new connection 2010-10-15 22:37:51 -07:00
Brian Lopez
6e5cda6a52 avoid potential race-condition with closing a connection 2010-10-15 12:27:52 -07:00
Brian Lopez
a6b5e9c28c add connect_flags to default options and add REMEMBER_OPTIONS to that list. fix NUM2INT to be NUM2ULONG as it should be for flags 2010-10-14 08:12:52 -07:00
Brian Lopez
7169649857 free the client after close if we can 2010-10-13 15:25:37 -07:00
Brian Lopez
225ddadaf7 forgot to remove this 2010-10-13 15:18:12 -07:00
Brian Lopez
0d1e9916bf get rid of double-pointer casting 2010-10-13 15:17:35 -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
f9d30e8f85 check for error from mysql_affected_rows call 2010-10-05 23:36:37 -07:00
Brian Lopez
40f0cd012c change connection check symantecs 2010-10-05 23:36:05 -07:00
Brian Lopez
4383885634 was in a hurry earlier 2010-09-27 13:24:37 -07:00
Brian Lopez
307b92b966 whoops, lost this line in a previous patch 2010-09-27 11:17:47 -07:00
Brian Lopez
dc9164d016 re-fix some compiler warnings 2010-09-14 22:27:18 -07:00
Brian Lopez
e7924df06a make sure we only attempt to close/free the MYSQL pointer once 2010-09-14 22:27:07 -07:00
Brian Lopez
5cadce3417 fix bug in rb_mysql_client_free 2010-09-14 20:51:21 -07:00
Joe Damato
05c942a668 Fix macros and associated semicolons 2010-09-14 19:14:07 -07:00
Joe Damato
7b8d6359c2 Fix data corruption bug 2010-09-14 18:01:14 -07:00
Brian Lopez
b1b66cc389 enable cross-compilation 2010-09-09 07:35:31 -07:00
Brian Lopez
64be4019ad work around an rbx bug (it's going to be fixed in rbx soon anyhow) 2010-09-07 15:43:22 -07:00
Brian Lopez
530b082905 Revert "remove cached values for better rbx compatibility (this may come back in the near future)"
This reverts commit d12c5e2e27.
2010-09-07 15:38:08 -07:00
Brian Lopez
d12c5e2e27 remove cached values for better rbx compatibility (this may come back in the near future) 2010-09-04 11:52:10 -07:00
Brian Lopez
c110d0d263 rbx doesn't have rb_obj_dup yet 2010-09-04 11:52:09 -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
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
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
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
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
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
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é
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
Luis Lavena
4c27a1e4fc extconf detect properly mingw. 2010-08-12 02:19:04 +08:00