swift-db-mysql 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ee5b272d79d1ac384a2e922b217fa23ee4c1ef74
4
+ data.tar.gz: e765c67b44843fb780decc4e9eff46b0c8721810
5
+ SHA512:
6
+ metadata.gz: 57b271d67812362c0c2e776420db1f4673c8ac9a5b6dd7670e215a2662fc9ac0048c84530055452bed350aa2fc7c777c47b4cba08ca464c82d2b15a8ffff68d9
7
+ data.tar.gz: d1473cc7ad558e0b74a8fcad72f7abe661ded46dfc49de4cc8d29b7b3ec6ce0b9f321379115c0b71597014fcdf2e80663db16dc069acf74069865e726ae846da
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.3.1 (2015-03-22)
2
+
3
+ * prepared statement uuid overflow fix.
4
+
1
5
  == 0.3.0 (2013-02-18)
2
6
 
3
7
  * added encoding option to Adapter#new
data/README.md CHANGED
@@ -12,8 +12,15 @@ MRI adapter for MySQL
12
12
 
13
13
  ## Requirements
14
14
 
15
- * mysql client deveopment libraries
16
- * uuid development libraries
15
+ * mysql client deveopment libraries (libmysqlclient-dev)
16
+ * uuid development libraries (uuid-dev)
17
+
18
+ ## Building
19
+
20
+ ```
21
+ git submodule update --init
22
+ rake
23
+ ```
17
24
 
18
25
  ## API
19
26
 
@@ -49,6 +56,27 @@ MRI adapter for MySQL
49
56
  #insert_id
50
57
  ```
51
58
 
59
+ ## Connection options
60
+
61
+ ```
62
+ ╭────────────────────╥────────────┬─────────────╮
63
+ │ Name ║ Default │ Optional │
64
+ ╞════════════════════╬════════════╪═════════════╡
65
+ │ db ║ - │ No │
66
+ │ host ║ 127.0.0.1 │ Yes │
67
+ │ port ║ 3306 │ Yes │
68
+ │ user ║ Etc.login │ Yes │
69
+ │ password ║ nil │ Yes │
70
+ │ encoding ║ utf8 │ Yes │
71
+ │ ssl ║ │ Yes │
72
+ │ ssl[:key] ║ - │ No │
73
+ │ ssl[:cert] ║ nil │ Yes │
74
+ │ ssl[:ca] ║ nil │ Yes │
75
+ │ ssl[:capath] ║ nil │ Yes │
76
+ │ ssl[:cipher] ║ nil │ Yes │
77
+ └────────────────────╨────────────┴─────────────┘
78
+ ```
79
+
52
80
  ## Example
53
81
 
54
82
  ```ruby
@@ -4,7 +4,17 @@
4
4
 
5
5
  #include "common.h"
6
6
  #include "typecast.h"
7
- #include <uuid/uuid.h>
7
+
8
+ #ifdef HAVE_CONST_UUID_VARIANT_NCS
9
+ #include <uuid/uuid.h>
10
+ #else
11
+ // TODO: no guarantee of being unique.
12
+ typedef unsigned char uuid_t[16];
13
+ void uuid_generate(uuid_t uuid) {
14
+ for (int i = 0; i < sizeof(uuid); i++)
15
+ uuid[i] = rand() % 256;
16
+ }
17
+ #endif
8
18
 
9
19
  VALUE db_mysql_adapter_escape(VALUE, VALUE);
10
20
 
@@ -14,11 +24,12 @@ VALUE rb_uuid_string() {
14
24
  char uuid_hex[sizeof(uuid_t) * 2 + 1];
15
25
 
16
26
  uuid_generate(uuid);
27
+
28
+ memset(uuid_hex, 0, sizeof(uuid_hex));
17
29
  for (n = 0; n < sizeof(uuid_t); n++)
18
- sprintf(uuid_hex + n * 2 + 1, "%02x", uuid[n]);
30
+ sprintf(uuid_hex + n * 2, "%02x", uuid[n]);
19
31
 
20
- uuid_hex[0] = 'u';
21
- return rb_str_new(uuid_hex, sizeof(uuid_t) * 2 + 1);
32
+ return rb_str_new(uuid_hex, sizeof(uuid_t) * 2);
22
33
  }
23
34
 
24
35
  size_t db_mysql_buffer_adjust(char **buffer, size_t size, size_t offset, size_t need) {
@@ -1,6 +1,11 @@
1
1
  #include "datetime.h"
2
+ #include <time.h>
2
3
  #include <ctype.h>
3
4
 
5
+ #define CONST_GET(scope, constant) rb_funcall(scope, rb_intern("const_get"), 1, rb_str_new2(constant))
6
+ #define TO_S(v) rb_funcall(v, rb_intern("to_s"), 0)
7
+ #define CSTRING(v) RSTRING_PTR(TO_S(v))
8
+
4
9
  extern VALUE dtformat;
5
10
 
6
11
  VALUE cSwiftDateTime, day_seconds;
@@ -1,8 +1,11 @@
1
1
  #pragma once
2
2
 
3
- #include "common.h"
4
- #include <math.h>
3
+ #include <ruby.h>
4
+ #include <stdlib.h>
5
+ #include <stdint.h>
6
+ #include <string.h>
7
+ #include <stdbool.h>
5
8
 
6
- DLL_PRIVATE extern VALUE cSwiftDateTime;
7
- DLL_PRIVATE void init_swift_datetime();
8
- DLL_PRIVATE VALUE datetime_parse(VALUE klass, const char *data, size_t size);
9
+ extern VALUE cSwiftDateTime;
10
+ void init_swift_datetime();
11
+ VALUE datetime_parse(VALUE klass, const char *data, size_t size);
@@ -34,4 +34,5 @@ find_header 'mysql.h', *inc_paths.dup.unshift(mysql_inc).compact
34
34
  find_library 'uuid', 'main', *lib_paths.dup.unshift(uuid_lib).compact
35
35
  find_library 'mysqlclient', 'main', *lib_paths.dup.unshift(mysql_lib).compact
36
36
 
37
+ have_const(%w(UUID_VARIANT_NCS), 'uuid.h')
37
38
  create_makefile('swift_db_mysql_ext')
data/test/test_async.rb CHANGED
@@ -2,33 +2,35 @@ require 'helper'
2
2
 
3
3
  describe 'async operations' do
4
4
  it 'can query async and call block with result when ready' do
5
- rows = []
6
- pool = 3.times.map {Swift::DB::Mysql.new(db: 'swift_test')}
5
+ rows = []
6
+ threads = []
7
+ pool = 3.times.map {Swift::DB::Mysql.new(db: 'swift_test')}
7
8
 
8
9
  3.times do |n|
9
- Thread.new do
10
+ threads << Thread.new do
10
11
  pool[n].query("select sleep(#{(3 - n) / 10.0}), #{n + 1} as query_id") {|row| rows << row[:query_id]}
11
12
  end
12
13
  end
13
14
 
14
- Thread.list.reject {|thread| Thread.current == thread}.each(&:join)
15
+ threads.each(&:join)
15
16
  assert_equal [3, 2, 1], rows
16
17
  end
17
18
 
18
19
  it 'returns and allows IO poll on connection file descriptor' do
19
20
 
20
- rows = []
21
- pool = 3.times.map {Swift::DB::Mysql.new(db: 'swift_test')}
21
+ rows = []
22
+ threads = []
23
+ pool = 3.times.map {Swift::DB::Mysql.new(db: 'swift_test')}
22
24
 
23
25
  3.times do |n|
24
- Thread.new do
26
+ threads << Thread.new do
25
27
  pool[n].query("select sleep(#{(3 - n) / 10.0}), #{n + 1} as query_id")
26
28
  IO.select([IO.for_fd(pool[n].fileno)], [], [])
27
29
  rows << pool[n].result.first[:query_id]
28
30
  end
29
31
  end
30
32
 
31
- Thread.list.reject {|thread| Thread.current == thread}.each(&:join)
33
+ threads.each(&:join)
32
34
  assert_equal [3, 2, 1], rows
33
35
  end
34
36
  end
data/test/test_ssl.rb CHANGED
@@ -1,10 +1,11 @@
1
1
  require 'helper'
2
2
 
3
3
  describe 'adapter ssl' do
4
- # TODO: this seems to rely on openssl versions used to build the mysql server.
5
- # it 'should connect to database with ssl options' do
6
- # key = File.join(File.dirname(__FILE__), 'server.key')
7
- # cert = File.join(File.dirname(__FILE__), 'server.crt')
8
- # assert Swift::DB::Mysql.new(db: 'swift_test', ssl: {key: key, cert: cert})
9
- # end
4
+ # TODO: this seems to rely on openssl versions used to build the mysql server.
5
+ it 'should connect to database with ssl options' do
6
+ skip
7
+ key = File.join(File.dirname(__FILE__), 'server.key')
8
+ cert = File.join(File.dirname(__FILE__), 'server.crt')
9
+ assert Swift::DB::Mysql.new(db: 'swift_test', ssl: {key: key, cert: cert})
10
+ end
10
11
  end
metadata CHANGED
@@ -1,32 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swift-db-mysql
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.3.0
4
+ version: 0.3.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Bharanee Rathna
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-18 00:00:00.000000000 Z
11
+ date: 2015-03-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- type: :development
14
+ name: rake
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
20
+ type: :development
22
21
  prerelease: false
23
22
  version_requirements: !ruby/object:Gem::Requirement
24
- none: false
25
23
  requirements:
26
- - - ! '>='
24
+ - - ">="
27
25
  - !ruby/object:Gem::Version
28
26
  version: '0'
29
- name: rake
30
27
  description: Swift adapter for MySQL database
31
28
  email:
32
29
  - deepfryed@gmail.com
@@ -35,53 +32,53 @@ extensions:
35
32
  - ext/swift/db/mysql/extconf.rb
36
33
  extra_rdoc_files: []
37
34
  files:
38
- - ext/swift/db/mysql/datetime.c
39
- - ext/swift/db/mysql/main.c
40
- - ext/swift/db/mysql/typecast.c
35
+ - CHANGELOG
36
+ - README.md
41
37
  - ext/swift/db/mysql/adapter.c
42
- - ext/swift/db/mysql/result.c
43
- - ext/swift/db/mysql/statement.c
38
+ - ext/swift/db/mysql/adapter.h
44
39
  - ext/swift/db/mysql/common.c
45
- - ext/swift/db/mysql/typecast.h
40
+ - ext/swift/db/mysql/common.h
41
+ - ext/swift/db/mysql/datetime.c
46
42
  - ext/swift/db/mysql/datetime.h
43
+ - ext/swift/db/mysql/extconf.rb
44
+ - ext/swift/db/mysql/gvl.h
45
+ - ext/swift/db/mysql/main.c
46
+ - ext/swift/db/mysql/result.c
47
47
  - ext/swift/db/mysql/result.h
48
+ - ext/swift/db/mysql/statement.c
48
49
  - ext/swift/db/mysql/statement.h
49
- - ext/swift/db/mysql/adapter.h
50
- - ext/swift/db/mysql/gvl.h
51
- - ext/swift/db/mysql/common.h
52
- - ext/swift/db/mysql/extconf.rb
50
+ - ext/swift/db/mysql/typecast.c
51
+ - ext/swift/db/mysql/typecast.h
52
+ - lib/swift-db-mysql.rb
53
+ - lib/swift/db/mysql.rb
53
54
  - test/helper.rb
54
- - test/test_ssl.rb
55
- - test/test_encoding.rb
56
55
  - test/test_adapter.rb
57
56
  - test/test_async.rb
58
- - lib/swift/db/mysql.rb
59
- - lib/swift-db-mysql.rb
60
- - README.md
61
- - CHANGELOG
57
+ - test/test_encoding.rb
58
+ - test/test_ssl.rb
62
59
  homepage: http://github.com/deepfryed/swift-db-mysql
63
60
  licenses: []
61
+ metadata: {}
64
62
  post_install_message:
65
63
  rdoc_options: []
66
64
  require_paths:
67
65
  - lib
68
66
  - ext
69
67
  required_ruby_version: !ruby/object:Gem::Requirement
70
- none: false
71
68
  requirements:
72
- - - ! '>='
69
+ - - ">="
73
70
  - !ruby/object:Gem::Version
74
71
  version: '0'
75
72
  required_rubygems_version: !ruby/object:Gem::Requirement
76
- none: false
77
73
  requirements:
78
- - - ! '>='
74
+ - - ">="
79
75
  - !ruby/object:Gem::Version
80
76
  version: '0'
81
77
  requirements: []
82
78
  rubyforge_project:
83
- rubygems_version: 1.8.24
79
+ rubygems_version: 2.2.0
84
80
  signing_key:
85
- specification_version: 3
81
+ specification_version: 4
86
82
  summary: Swift mysql adapter
87
83
  test_files: []
84
+ has_rdoc: