activerecord-memsql 1.0.0

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: d94f8681817f340ea7a58df713a314f44ea23f78
4
+ data.tar.gz: ebfba3b893d5e877b0b3bb7fd468248e88b14c39
5
+ SHA512:
6
+ metadata.gz: 8a2d0ec2a3061e27bb636af514e05d6e4ad95fba4f931740302a200a221bf3db01e953f53015c28ac0cd517f7450ab21fce2f61b0e86edd45df4b0a7157e3602
7
+ data.tar.gz: a06d7d52824b92340d55855bb72a29a9a8745b505b926eae38fcbafea5d6768970ad97ef34304a9a7462781aeb4135f15a9b0f4feace991ddce811a5163719e3
@@ -0,0 +1,131 @@
1
+ require "active_record/connection_adapters/abstract_mysql_adapter"
2
+ require "active_record/connection_adapters/mysql2_adapter"
3
+ require "active_record/connection_adapters/mysql/database_statements"
4
+
5
+ gem "mysql2", ">= 0.3.18", "< 0.5"
6
+ require "mysql2"
7
+ raise "mysql2 0.4.3 is not supported. Please upgrade to 0.4.4+" if Mysql2::VERSION == "0.4.3"
8
+
9
+ module ActiveRecord
10
+ module ConnectionHandling # :nodoc:
11
+ # Establishes a connection to the database that's used by all Active Record objects.
12
+ def memsql_connection(config)
13
+ config = config.symbolize_keys
14
+
15
+ config[:username] = "root" if config[:username].nil?
16
+ config[:flags] ||= 0
17
+ config[:variables] = {sql_mode: ''} if config[:variables].nil?
18
+
19
+ if config[:flags].kind_of? Array
20
+ config[:flags].push "FOUND_ROWS".freeze
21
+ else
22
+ config[:flags] |= Mysql2::Client::FOUND_ROWS
23
+ end
24
+
25
+ client = Mysql2::Client.new(config)
26
+ ConnectionAdapters::Mysql2Adapter.new(client, logger, nil, config)
27
+ rescue Mysql2::Error => error
28
+ if error.message.include?("Unknown database")
29
+ raise ActiveRecord::NoDatabaseError
30
+ else
31
+ raise
32
+ end
33
+ end
34
+ end
35
+
36
+ module ConnectionAdapters
37
+ class MemsqlAdapter < AbstractMysqlAdapter
38
+ ADAPTER_NAME = "MemSQL".freeze
39
+
40
+ include MySQL::DatabaseStatements
41
+
42
+ def initialize(connection, logger, connection_options, config)
43
+ super
44
+ @prepared_statements = false unless config.key?(:prepared_statements)
45
+ configure_connection
46
+ end
47
+
48
+ def supports_json?
49
+ !mariadb? && version >= "5.7.8"
50
+ end
51
+
52
+ def supports_comments?
53
+ true
54
+ end
55
+
56
+ def supports_comments_in_create?
57
+ true
58
+ end
59
+
60
+ def supports_savepoints?
61
+ true
62
+ end
63
+
64
+ def supports_advisory_locks?
65
+ false
66
+ end
67
+
68
+ # HELPER METHODS ===========================================
69
+
70
+ def each_hash(result) # :nodoc:
71
+ if block_given?
72
+ result.each(as: :hash, symbolize_keys: true) do |row|
73
+ yield row
74
+ end
75
+ else
76
+ to_enum(:each_hash, result)
77
+ end
78
+ end
79
+
80
+ def error_number(exception)
81
+ exception.error_number if exception.respond_to?(:error_number)
82
+ end
83
+
84
+ #--
85
+ # QUOTING ==================================================
86
+ #++
87
+
88
+ def quote_string(string)
89
+ @connection.escape(string)
90
+ end
91
+
92
+ #--
93
+ # CONNECTION MANAGEMENT ====================================
94
+ #++
95
+
96
+ def active?
97
+ @connection.ping
98
+ end
99
+
100
+ def reconnect!
101
+ super
102
+ disconnect!
103
+ connect
104
+ end
105
+ alias :reset! :reconnect!
106
+
107
+ # Disconnects from the database if already connected.
108
+ # Otherwise, this method does nothing.
109
+ def disconnect!
110
+ super
111
+ @connection.close
112
+ end
113
+
114
+ private
115
+
116
+ def connect
117
+ @connection = Mysql2::Client.new(@config)
118
+ configure_connection
119
+ end
120
+
121
+ def configure_connection
122
+ @connection.query_options.merge!(as: :array)
123
+ super
124
+ end
125
+
126
+ def full_version
127
+ @full_version ||= @connection.server_info[:version]
128
+ end
129
+ end
130
+ end
131
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activerecord-memsql
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Geselle
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-03-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.14'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activerecord
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 4.0.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 4.0.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: mysql2
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.4.2
76
+ - - "<"
77
+ - !ruby/object:Gem::Version
78
+ version: '0.5'
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 0.4.2
86
+ - - "<"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.5'
89
+ description: "The ActiveRecod MemSQL Adapter is an ActiveRecord connection adapter
90
+ based on the standard mysql2 adapter.\nThis adapter is a customized version of the
91
+ mysql2 adapter to provide support for MemSQL. "
92
+ email:
93
+ - thomas@geselle.fr
94
+ executables: []
95
+ extensions: []
96
+ extra_rdoc_files: []
97
+ files:
98
+ - lib/active_record/connection_adapters/memsql_adapter.rb
99
+ homepage: https://github.com/tgeselle/activerecord-memsql
100
+ licenses:
101
+ - MIT
102
+ metadata:
103
+ allowed_push_host: https://rubygems.org
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ requirements: []
119
+ rubyforge_project:
120
+ rubygems_version: 2.6.11
121
+ signing_key:
122
+ specification_version: 4
123
+ summary: ActiveRecord MemSQL Adapter
124
+ test_files: []