mysql2 0.3.11-x86-mingw32 → 0.3.18-x86-mingw32
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 +15 -0
 - data/README.md +280 -75
 - data/ext/mysql2/client.c +721 -206
 - data/ext/mysql2/client.h +26 -12
 - data/ext/mysql2/extconf.rb +120 -16
 - data/ext/mysql2/infile.c +122 -0
 - data/ext/mysql2/infile.h +1 -0
 - data/ext/mysql2/mysql2_ext.h +7 -4
 - data/ext/mysql2/mysql_enc_name_to_ruby.h +168 -0
 - data/ext/mysql2/mysql_enc_to_ruby.h +246 -0
 - data/ext/mysql2/result.c +230 -112
 - data/ext/mysql2/result.h +4 -1
 - data/lib/mysql2.rb +46 -3
 - data/lib/mysql2/1.8/mysql2.so +0 -0
 - data/lib/mysql2/1.9/mysql2.so +0 -0
 - data/lib/mysql2/2.0/mysql2.so +0 -0
 - data/lib/mysql2/2.1/mysql2.so +0 -0
 - data/lib/mysql2/client.rb +48 -200
 - data/lib/mysql2/console.rb +5 -0
 - data/lib/mysql2/em.rb +22 -3
 - data/lib/mysql2/error.rb +71 -6
 - data/lib/mysql2/mysql2.rb +2 -0
 - data/lib/mysql2/version.rb +1 -1
 - data/spec/configuration.yml.example +17 -0
 - data/spec/em/em_spec.rb +90 -5
 - data/spec/my.cnf.example +9 -0
 - data/spec/mysql2/client_spec.rb +501 -69
 - data/spec/mysql2/error_spec.rb +58 -44
 - data/spec/mysql2/result_spec.rb +191 -74
 - data/spec/spec_helper.rb +23 -3
 - data/spec/test_data +1 -0
 - data/support/libmysql.def +219 -0
 - data/support/mysql_enc_to_ruby.rb +82 -0
 - data/support/ruby_enc_to_mysql.rb +61 -0
 - data/vendor/README +654 -0
 - data/vendor/libmysql.dll +0 -0
 - metadata +86 -221
 - data/.gitignore +0 -12
 - data/.rspec +0 -3
 - data/.rvmrc +0 -1
 - data/.travis.yml +0 -7
 - data/CHANGELOG.md +0 -244
 - data/Gemfile +0 -3
 - data/MIT-LICENSE +0 -20
 - data/Rakefile +0 -5
 - data/benchmark/active_record.rb +0 -51
 - data/benchmark/active_record_threaded.rb +0 -42
 - data/benchmark/allocations.rb +0 -33
 - data/benchmark/escape.rb +0 -36
 - data/benchmark/query_with_mysql_casting.rb +0 -80
 - data/benchmark/query_without_mysql_casting.rb +0 -56
 - data/benchmark/sequel.rb +0 -37
 - data/benchmark/setup_db.rb +0 -119
 - data/benchmark/threaded.rb +0 -44
 - data/mysql2.gemspec +0 -29
 - data/tasks/benchmarks.rake +0 -20
 - data/tasks/compile.rake +0 -71
 - data/tasks/rspec.rake +0 -16
 - data/tasks/vendor_mysql.rake +0 -40
 
    
        data/Gemfile
    DELETED
    
    
    
        data/MIT-LICENSE
    DELETED
    
    | 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            Copyright (c) 2010-2011 Brian Lopez - http://github.com/brianmario
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
       4 
     | 
    
         
            -
            a copy of this software and associated documentation files (the
         
     | 
| 
       5 
     | 
    
         
            -
            "Software"), to deal in the Software without restriction, including
         
     | 
| 
       6 
     | 
    
         
            -
            without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
       7 
     | 
    
         
            -
            distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
       8 
     | 
    
         
            -
            permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
       9 
     | 
    
         
            -
            the following conditions:
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            The above copyright notice and this permission notice shall be
         
     | 
| 
       12 
     | 
    
         
            -
            included in all copies or substantial portions of the Software.
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
       15 
     | 
    
         
            -
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
       16 
     | 
    
         
            -
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
       17 
     | 
    
         
            -
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
       18 
     | 
    
         
            -
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
       19 
     | 
    
         
            -
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
       20 
     | 
    
         
            -
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
    
        data/Rakefile
    DELETED
    
    
    
        data/benchmark/active_record.rb
    DELETED
    
    | 
         @@ -1,51 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: UTF-8
         
     | 
| 
       2 
     | 
    
         
            -
            $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            require 'rubygems'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'benchmark'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'active_record'
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            ActiveRecord::Base.default_timezone = :local
         
     | 
| 
       9 
     | 
    
         
            -
            ActiveRecord::Base.time_zone_aware_attributes = true
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            number_of = 10
         
     | 
| 
       12 
     | 
    
         
            -
            mysql2_opts = {
         
     | 
| 
       13 
     | 
    
         
            -
              :adapter => 'mysql2',
         
     | 
| 
       14 
     | 
    
         
            -
              :database => 'test'
         
     | 
| 
       15 
     | 
    
         
            -
            }
         
     | 
| 
       16 
     | 
    
         
            -
            mysql_opts = {
         
     | 
| 
       17 
     | 
    
         
            -
              :adapter => 'mysql',
         
     | 
| 
       18 
     | 
    
         
            -
              :database => 'test'
         
     | 
| 
       19 
     | 
    
         
            -
            }
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            class Mysql2Model < ActiveRecord::Base
         
     | 
| 
       22 
     | 
    
         
            -
              set_table_name :mysql2_test
         
     | 
| 
       23 
     | 
    
         
            -
            end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
            class MysqlModel < ActiveRecord::Base
         
     | 
| 
       26 
     | 
    
         
            -
              set_table_name :mysql2_test
         
     | 
| 
       27 
     | 
    
         
            -
            end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
            Benchmark.bmbm do |x|
         
     | 
| 
       30 
     | 
    
         
            -
              x.report "Mysql2" do
         
     | 
| 
       31 
     | 
    
         
            -
                Mysql2Model.establish_connection(mysql2_opts)
         
     | 
| 
       32 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       33 
     | 
    
         
            -
                  Mysql2Model.all(:limit => 1000).each{ |r|
         
     | 
| 
       34 
     | 
    
         
            -
                    r.attributes.keys.each{ |k|
         
     | 
| 
       35 
     | 
    
         
            -
                      r.send(k.to_sym)
         
     | 
| 
       36 
     | 
    
         
            -
                    }
         
     | 
| 
       37 
     | 
    
         
            -
                  }
         
     | 
| 
       38 
     | 
    
         
            -
                end
         
     | 
| 
       39 
     | 
    
         
            -
              end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
              x.report "Mysql" do
         
     | 
| 
       42 
     | 
    
         
            -
                MysqlModel.establish_connection(mysql_opts)
         
     | 
| 
       43 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       44 
     | 
    
         
            -
                  MysqlModel.all(:limit => 1000).each{ |r|
         
     | 
| 
       45 
     | 
    
         
            -
                    r.attributes.keys.each{ |k|
         
     | 
| 
       46 
     | 
    
         
            -
                      r.send(k.to_sym)
         
     | 
| 
       47 
     | 
    
         
            -
                    }
         
     | 
| 
       48 
     | 
    
         
            -
                  }
         
     | 
| 
       49 
     | 
    
         
            -
                end
         
     | 
| 
       50 
     | 
    
         
            -
              end
         
     | 
| 
       51 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,42 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: UTF-8
         
     | 
| 
       2 
     | 
    
         
            -
            $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            require 'rubygems'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'benchmark'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'active_record'
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            times = 25
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            # mysql2
         
     | 
| 
       12 
     | 
    
         
            -
            mysql2_opts = {
         
     | 
| 
       13 
     | 
    
         
            -
              :adapter => 'mysql2',
         
     | 
| 
       14 
     | 
    
         
            -
              :database => 'test',
         
     | 
| 
       15 
     | 
    
         
            -
              :pool => times
         
     | 
| 
       16 
     | 
    
         
            -
            }
         
     | 
| 
       17 
     | 
    
         
            -
            ActiveRecord::Base.establish_connection(mysql2_opts)
         
     | 
| 
       18 
     | 
    
         
            -
            x = Benchmark.realtime do
         
     | 
| 
       19 
     | 
    
         
            -
              threads = []
         
     | 
| 
       20 
     | 
    
         
            -
              times.times do
         
     | 
| 
       21 
     | 
    
         
            -
                threads << Thread.new { ActiveRecord::Base.connection.execute("select sleep(1)") }
         
     | 
| 
       22 
     | 
    
         
            -
              end
         
     | 
| 
       23 
     | 
    
         
            -
              threads.each {|t| t.join }
         
     | 
| 
       24 
     | 
    
         
            -
            end
         
     | 
| 
       25 
     | 
    
         
            -
            puts "mysql2: #{x} seconds"
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
            # mysql
         
     | 
| 
       29 
     | 
    
         
            -
            mysql2_opts = {
         
     | 
| 
       30 
     | 
    
         
            -
              :adapter => 'mysql',
         
     | 
| 
       31 
     | 
    
         
            -
              :database => 'test',
         
     | 
| 
       32 
     | 
    
         
            -
              :pool => times
         
     | 
| 
       33 
     | 
    
         
            -
            }
         
     | 
| 
       34 
     | 
    
         
            -
            ActiveRecord::Base.establish_connection(mysql2_opts)
         
     | 
| 
       35 
     | 
    
         
            -
            x = Benchmark.realtime do
         
     | 
| 
       36 
     | 
    
         
            -
              threads = []
         
     | 
| 
       37 
     | 
    
         
            -
              times.times do
         
     | 
| 
       38 
     | 
    
         
            -
                threads << Thread.new { ActiveRecord::Base.connection.execute("select sleep(1)") }
         
     | 
| 
       39 
     | 
    
         
            -
              end
         
     | 
| 
       40 
     | 
    
         
            -
              threads.each {|t| t.join }
         
     | 
| 
       41 
     | 
    
         
            -
            end
         
     | 
| 
       42 
     | 
    
         
            -
            puts "mysql: #{x} seconds"
         
     | 
    
        data/benchmark/allocations.rb
    DELETED
    
    | 
         @@ -1,33 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: UTF-8
         
     | 
| 
       2 
     | 
    
         
            -
            $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            raise Mysql2::Mysql2Error.new("GC allocation benchmarks only supported on Ruby 1.9!") unless RUBY_VERSION =~ /1\.9/
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            require 'rubygems'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'benchmark'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'active_record'
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            ActiveRecord::Base.default_timezone = :local
         
     | 
| 
       11 
     | 
    
         
            -
            ActiveRecord::Base.time_zone_aware_attributes = true
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
            class Mysql2Model < ActiveRecord::Base
         
     | 
| 
       14 
     | 
    
         
            -
              set_table_name :mysql2_test
         
     | 
| 
       15 
     | 
    
         
            -
            end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            def bench_allocations(feature, iterations = 10, &blk)
         
     | 
| 
       18 
     | 
    
         
            -
              puts "GC overhead for #{feature}"
         
     | 
| 
       19 
     | 
    
         
            -
              Mysql2Model.establish_connection(:adapter => 'mysql2', :database => 'test')
         
     | 
| 
       20 
     | 
    
         
            -
              GC::Profiler.clear
         
     | 
| 
       21 
     | 
    
         
            -
              GC::Profiler.enable
         
     | 
| 
       22 
     | 
    
         
            -
              iterations.times{ blk.call }
         
     | 
| 
       23 
     | 
    
         
            -
              GC::Profiler.report(STDOUT)
         
     | 
| 
       24 
     | 
    
         
            -
              GC::Profiler.disable
         
     | 
| 
       25 
     | 
    
         
            -
            end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
            bench_allocations('coercion') do
         
     | 
| 
       28 
     | 
    
         
            -
              Mysql2Model.all(:limit => 1000).each{ |r|
         
     | 
| 
       29 
     | 
    
         
            -
                r.attributes.keys.each{ |k|
         
     | 
| 
       30 
     | 
    
         
            -
                  r.send(k.to_sym)
         
     | 
| 
       31 
     | 
    
         
            -
                }
         
     | 
| 
       32 
     | 
    
         
            -
              }
         
     | 
| 
       33 
     | 
    
         
            -
            end
         
     | 
    
        data/benchmark/escape.rb
    DELETED
    
    | 
         @@ -1,36 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: UTF-8
         
     | 
| 
       2 
     | 
    
         
            -
            $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            require 'rubygems'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'benchmark'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'mysql'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'mysql2'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'do_mysql'
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            def run_escape_benchmarks(str, number_of = 1000)
         
     | 
| 
       11 
     | 
    
         
            -
              Benchmark.bmbm do |x|
         
     | 
| 
       12 
     | 
    
         
            -
                mysql = Mysql.new("localhost", "root")
         
     | 
| 
       13 
     | 
    
         
            -
                x.report "Mysql #{str.inspect}" do
         
     | 
| 
       14 
     | 
    
         
            -
                  number_of.times do
         
     | 
| 
       15 
     | 
    
         
            -
                    mysql.quote str
         
     | 
| 
       16 
     | 
    
         
            -
                  end
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                mysql2 = Mysql2::Client.new(:host => "localhost", :username => "root")
         
     | 
| 
       20 
     | 
    
         
            -
                x.report "Mysql2 #{str.inspect}" do
         
     | 
| 
       21 
     | 
    
         
            -
                  number_of.times do
         
     | 
| 
       22 
     | 
    
         
            -
                    mysql2.escape str
         
     | 
| 
       23 
     | 
    
         
            -
                  end
         
     | 
| 
       24 
     | 
    
         
            -
                end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                do_mysql = DataObjects::Connection.new("mysql://localhost/test")
         
     | 
| 
       27 
     | 
    
         
            -
                x.report "do_mysql #{str.inspect}" do
         
     | 
| 
       28 
     | 
    
         
            -
                  number_of.times do
         
     | 
| 
       29 
     | 
    
         
            -
                    do_mysql.quote_string str
         
     | 
| 
       30 
     | 
    
         
            -
                  end
         
     | 
| 
       31 
     | 
    
         
            -
                end
         
     | 
| 
       32 
     | 
    
         
            -
              end
         
     | 
| 
       33 
     | 
    
         
            -
            end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
            run_escape_benchmarks "abc'def\"ghi\0jkl%mno"
         
     | 
| 
       36 
     | 
    
         
            -
            run_escape_benchmarks "clean string"
         
     | 
| 
         @@ -1,80 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: UTF-8
         
     | 
| 
       2 
     | 
    
         
            -
            $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            require 'rubygems'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'benchmark'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'mysql'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'mysql2'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'do_mysql'
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            number_of = 100
         
     | 
| 
       11 
     | 
    
         
            -
            database = 'test'
         
     | 
| 
       12 
     | 
    
         
            -
            sql = "SELECT * FROM mysql2_test LIMIT 100"
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
            class Mysql
         
     | 
| 
       15 
     | 
    
         
            -
              include Enumerable
         
     | 
| 
       16 
     | 
    
         
            -
            end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
            def mysql_cast(type, value)
         
     | 
| 
       19 
     | 
    
         
            -
              case type
         
     | 
| 
       20 
     | 
    
         
            -
                when Mysql::Field::TYPE_NULL
         
     | 
| 
       21 
     | 
    
         
            -
                  nil
         
     | 
| 
       22 
     | 
    
         
            -
                when Mysql::Field::TYPE_TINY, Mysql::Field::TYPE_SHORT, Mysql::Field::TYPE_LONG,
         
     | 
| 
       23 
     | 
    
         
            -
                     Mysql::Field::TYPE_INT24, Mysql::Field::TYPE_LONGLONG, Mysql::Field::TYPE_YEAR
         
     | 
| 
       24 
     | 
    
         
            -
                  value.to_i
         
     | 
| 
       25 
     | 
    
         
            -
                when Mysql::Field::TYPE_DECIMAL, Mysql::Field::TYPE_NEWDECIMAL
         
     | 
| 
       26 
     | 
    
         
            -
                  BigDecimal.new(value)
         
     | 
| 
       27 
     | 
    
         
            -
                when Mysql::Field::TYPE_DOUBLE, Mysql::Field::TYPE_FLOAT
         
     | 
| 
       28 
     | 
    
         
            -
                  value.to_f
         
     | 
| 
       29 
     | 
    
         
            -
                when Mysql::Field::TYPE_DATE
         
     | 
| 
       30 
     | 
    
         
            -
                  Date.parse(value)
         
     | 
| 
       31 
     | 
    
         
            -
                when Mysql::Field::TYPE_TIME, Mysql::Field::TYPE_DATETIME, Mysql::Field::TYPE_TIMESTAMP
         
     | 
| 
       32 
     | 
    
         
            -
                  Time.parse(value)
         
     | 
| 
       33 
     | 
    
         
            -
                when Mysql::Field::TYPE_BLOB, Mysql::Field::TYPE_BIT, Mysql::Field::TYPE_STRING,
         
     | 
| 
       34 
     | 
    
         
            -
                     Mysql::Field::TYPE_VAR_STRING, Mysql::Field::TYPE_CHAR, Mysql::Field::TYPE_SET
         
     | 
| 
       35 
     | 
    
         
            -
                     Mysql::Field::TYPE_ENUM
         
     | 
| 
       36 
     | 
    
         
            -
                  value
         
     | 
| 
       37 
     | 
    
         
            -
                else
         
     | 
| 
       38 
     | 
    
         
            -
                  value
         
     | 
| 
       39 
     | 
    
         
            -
              end
         
     | 
| 
       40 
     | 
    
         
            -
            end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
            Benchmark.bmbm do |x|
         
     | 
| 
       43 
     | 
    
         
            -
              mysql2 = Mysql2::Client.new(:host => "localhost", :username => "root")
         
     | 
| 
       44 
     | 
    
         
            -
              mysql2.query "USE #{database}"
         
     | 
| 
       45 
     | 
    
         
            -
              x.report "Mysql2" do
         
     | 
| 
       46 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       47 
     | 
    
         
            -
                  mysql2_result = mysql2.query sql, :symbolize_keys => true
         
     | 
| 
       48 
     | 
    
         
            -
                  mysql2_result.each do |res|
         
     | 
| 
       49 
     | 
    
         
            -
                    # puts res.inspect
         
     | 
| 
       50 
     | 
    
         
            -
                  end
         
     | 
| 
       51 
     | 
    
         
            -
                end
         
     | 
| 
       52 
     | 
    
         
            -
              end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
              mysql = Mysql.new("localhost", "root")
         
     | 
| 
       55 
     | 
    
         
            -
              mysql.query "USE #{database}"
         
     | 
| 
       56 
     | 
    
         
            -
              x.report "Mysql" do
         
     | 
| 
       57 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       58 
     | 
    
         
            -
                  mysql_result = mysql.query sql
         
     | 
| 
       59 
     | 
    
         
            -
                  fields = mysql_result.fetch_fields
         
     | 
| 
       60 
     | 
    
         
            -
                  mysql_result.each do |row|
         
     | 
| 
       61 
     | 
    
         
            -
                    row_hash = {}
         
     | 
| 
       62 
     | 
    
         
            -
                    row.each_with_index do |f, j|
         
     | 
| 
       63 
     | 
    
         
            -
                      row_hash[fields[j].name.to_sym] = mysql_cast(fields[j].type, row[j])
         
     | 
| 
       64 
     | 
    
         
            -
                    end
         
     | 
| 
       65 
     | 
    
         
            -
                    # puts row_hash.inspect
         
     | 
| 
       66 
     | 
    
         
            -
                  end
         
     | 
| 
       67 
     | 
    
         
            -
                end
         
     | 
| 
       68 
     | 
    
         
            -
              end
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
              do_mysql = DataObjects::Connection.new("mysql://localhost/#{database}")
         
     | 
| 
       71 
     | 
    
         
            -
              command = do_mysql.create_command sql
         
     | 
| 
       72 
     | 
    
         
            -
              x.report "do_mysql" do
         
     | 
| 
       73 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       74 
     | 
    
         
            -
                  do_result = command.execute_reader
         
     | 
| 
       75 
     | 
    
         
            -
                  do_result.each do |res|
         
     | 
| 
       76 
     | 
    
         
            -
                    # puts res.inspect
         
     | 
| 
       77 
     | 
    
         
            -
                  end
         
     | 
| 
       78 
     | 
    
         
            -
                end
         
     | 
| 
       79 
     | 
    
         
            -
              end
         
     | 
| 
       80 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,56 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: UTF-8
         
     | 
| 
       2 
     | 
    
         
            -
            $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            require 'rubygems'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'benchmark'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'mysql'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'mysql2'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'do_mysql'
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            number_of = 100
         
     | 
| 
       11 
     | 
    
         
            -
            database = 'test'
         
     | 
| 
       12 
     | 
    
         
            -
            sql = "SELECT * FROM mysql2_test LIMIT 100"
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
            Benchmark.bmbm do |x|
         
     | 
| 
       15 
     | 
    
         
            -
              mysql2 = Mysql2::Client.new(:host => "localhost", :username => "root")
         
     | 
| 
       16 
     | 
    
         
            -
              mysql2.query "USE #{database}"
         
     | 
| 
       17 
     | 
    
         
            -
              x.report "Mysql2 (cast: true)" do
         
     | 
| 
       18 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       19 
     | 
    
         
            -
                  mysql2_result = mysql2.query sql, :symbolize_keys => true, :cast => true
         
     | 
| 
       20 
     | 
    
         
            -
                  mysql2_result.each do |res|
         
     | 
| 
       21 
     | 
    
         
            -
                    # puts res.inspect
         
     | 
| 
       22 
     | 
    
         
            -
                  end
         
     | 
| 
       23 
     | 
    
         
            -
                end
         
     | 
| 
       24 
     | 
    
         
            -
              end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
              x.report "Mysql2 (cast: false)" do
         
     | 
| 
       27 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       28 
     | 
    
         
            -
                  mysql2_result = mysql2.query sql, :symbolize_keys => true, :cast => false
         
     | 
| 
       29 
     | 
    
         
            -
                  mysql2_result.each do |res|
         
     | 
| 
       30 
     | 
    
         
            -
                    # puts res.inspect
         
     | 
| 
       31 
     | 
    
         
            -
                  end
         
     | 
| 
       32 
     | 
    
         
            -
                end
         
     | 
| 
       33 
     | 
    
         
            -
              end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
              mysql = Mysql.new("localhost", "root")
         
     | 
| 
       36 
     | 
    
         
            -
              mysql.query "USE #{database}"
         
     | 
| 
       37 
     | 
    
         
            -
              x.report "Mysql" do
         
     | 
| 
       38 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       39 
     | 
    
         
            -
                  mysql_result = mysql.query sql
         
     | 
| 
       40 
     | 
    
         
            -
                  mysql_result.each_hash do |res|
         
     | 
| 
       41 
     | 
    
         
            -
                    # puts res.inspect
         
     | 
| 
       42 
     | 
    
         
            -
                  end
         
     | 
| 
       43 
     | 
    
         
            -
                end
         
     | 
| 
       44 
     | 
    
         
            -
              end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
              do_mysql = DataObjects::Connection.new("mysql://localhost/#{database}")
         
     | 
| 
       47 
     | 
    
         
            -
              command = DataObjects::Mysql::Command.new do_mysql, sql
         
     | 
| 
       48 
     | 
    
         
            -
              x.report "do_mysql" do
         
     | 
| 
       49 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       50 
     | 
    
         
            -
                  do_result = command.execute_reader
         
     | 
| 
       51 
     | 
    
         
            -
                  do_result.each do |res|
         
     | 
| 
       52 
     | 
    
         
            -
                    # puts res.inspect
         
     | 
| 
       53 
     | 
    
         
            -
                  end
         
     | 
| 
       54 
     | 
    
         
            -
                end
         
     | 
| 
       55 
     | 
    
         
            -
              end
         
     | 
| 
       56 
     | 
    
         
            -
            end
         
     | 
    
        data/benchmark/sequel.rb
    DELETED
    
    | 
         @@ -1,37 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: UTF-8
         
     | 
| 
       2 
     | 
    
         
            -
            $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            require 'rubygems'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'benchmark'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'mysql2'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'sequel'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'sequel/adapters/do'
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            number_of = 10
         
     | 
| 
       11 
     | 
    
         
            -
            mysql2_opts = "mysql2://localhost/test"
         
     | 
| 
       12 
     | 
    
         
            -
            mysql_opts = "mysql://localhost/test"
         
     | 
| 
       13 
     | 
    
         
            -
            do_mysql_opts = "do:mysql://localhost/test"
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            class Mysql2Model < Sequel::Model(Sequel.connect(mysql2_opts)[:mysql2_test]); end
         
     | 
| 
       16 
     | 
    
         
            -
            class MysqlModel < Sequel::Model(Sequel.connect(mysql_opts)[:mysql2_test]); end
         
     | 
| 
       17 
     | 
    
         
            -
            class DOMysqlModel < Sequel::Model(Sequel.connect(do_mysql_opts)[:mysql2_test]); end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
            Benchmark.bmbm do |x|
         
     | 
| 
       20 
     | 
    
         
            -
              x.report "Mysql2" do
         
     | 
| 
       21 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       22 
     | 
    
         
            -
                  Mysql2Model.limit(1000).all
         
     | 
| 
       23 
     | 
    
         
            -
                end
         
     | 
| 
       24 
     | 
    
         
            -
              end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
              x.report "do:mysql" do
         
     | 
| 
       27 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       28 
     | 
    
         
            -
                  DOMysqlModel.limit(1000).all
         
     | 
| 
       29 
     | 
    
         
            -
                end
         
     | 
| 
       30 
     | 
    
         
            -
              end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
              x.report "Mysql" do
         
     | 
| 
       33 
     | 
    
         
            -
                number_of.times do
         
     | 
| 
       34 
     | 
    
         
            -
                  MysqlModel.limit(1000).all
         
     | 
| 
       35 
     | 
    
         
            -
                end
         
     | 
| 
       36 
     | 
    
         
            -
              end
         
     | 
| 
       37 
     | 
    
         
            -
            end
         
     | 
    
        data/benchmark/setup_db.rb
    DELETED
    
    | 
         @@ -1,119 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: UTF-8
         
     | 
| 
       2 
     | 
    
         
            -
            $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            # This script is for generating psudo-random data into a single table consisting of nearly every
         
     | 
| 
       5 
     | 
    
         
            -
            # data type MySQL 5.1 supports.
         
     | 
| 
       6 
     | 
    
         
            -
            #
         
     | 
| 
       7 
     | 
    
         
            -
            # It's meant to be used with the query.rb benchmark script (or others in the future)
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            require 'mysql2'
         
     | 
| 
       10 
     | 
    
         
            -
            require 'rubygems'
         
     | 
| 
       11 
     | 
    
         
            -
            require 'faker'
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
            num = ENV['NUM'] && ENV['NUM'].to_i || 10_000
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            create_table_sql = %[
         
     | 
| 
       16 
     | 
    
         
            -
              CREATE TABLE IF NOT EXISTS mysql2_test (
         
     | 
| 
       17 
     | 
    
         
            -
                null_test VARCHAR(10),
         
     | 
| 
       18 
     | 
    
         
            -
                bit_test BIT,
         
     | 
| 
       19 
     | 
    
         
            -
                tiny_int_test TINYINT,
         
     | 
| 
       20 
     | 
    
         
            -
                small_int_test SMALLINT,
         
     | 
| 
       21 
     | 
    
         
            -
                medium_int_test MEDIUMINT,
         
     | 
| 
       22 
     | 
    
         
            -
                int_test INT,
         
     | 
| 
       23 
     | 
    
         
            -
                big_int_test BIGINT,
         
     | 
| 
       24 
     | 
    
         
            -
                float_test FLOAT(10,3),
         
     | 
| 
       25 
     | 
    
         
            -
                float_zero_test FLOAT(10,3),
         
     | 
| 
       26 
     | 
    
         
            -
                double_test DOUBLE(10,3),
         
     | 
| 
       27 
     | 
    
         
            -
                decimal_test DECIMAL(10,3),
         
     | 
| 
       28 
     | 
    
         
            -
                decimal_zero_test DECIMAL(10,3),
         
     | 
| 
       29 
     | 
    
         
            -
                date_test DATE,
         
     | 
| 
       30 
     | 
    
         
            -
                date_time_test DATETIME,
         
     | 
| 
       31 
     | 
    
         
            -
                timestamp_test TIMESTAMP,
         
     | 
| 
       32 
     | 
    
         
            -
                time_test TIME,
         
     | 
| 
       33 
     | 
    
         
            -
                year_test YEAR(4),
         
     | 
| 
       34 
     | 
    
         
            -
                char_test CHAR(10),
         
     | 
| 
       35 
     | 
    
         
            -
                varchar_test VARCHAR(10),
         
     | 
| 
       36 
     | 
    
         
            -
                binary_test BINARY(10),
         
     | 
| 
       37 
     | 
    
         
            -
                varbinary_test VARBINARY(10),
         
     | 
| 
       38 
     | 
    
         
            -
                tiny_blob_test TINYBLOB,
         
     | 
| 
       39 
     | 
    
         
            -
                tiny_text_test TINYTEXT,
         
     | 
| 
       40 
     | 
    
         
            -
                blob_test BLOB,
         
     | 
| 
       41 
     | 
    
         
            -
                text_test TEXT,
         
     | 
| 
       42 
     | 
    
         
            -
                medium_blob_test MEDIUMBLOB,
         
     | 
| 
       43 
     | 
    
         
            -
                medium_text_test MEDIUMTEXT,
         
     | 
| 
       44 
     | 
    
         
            -
                long_blob_test LONGBLOB,
         
     | 
| 
       45 
     | 
    
         
            -
                long_text_test LONGTEXT,
         
     | 
| 
       46 
     | 
    
         
            -
                enum_test ENUM('val1', 'val2'),
         
     | 
| 
       47 
     | 
    
         
            -
                set_test SET('val1', 'val2')
         
     | 
| 
       48 
     | 
    
         
            -
              ) DEFAULT CHARSET=utf8
         
     | 
| 
       49 
     | 
    
         
            -
            ]
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
            # connect to localhost by default, pass options as needed
         
     | 
| 
       52 
     | 
    
         
            -
            @client = Mysql2::Client.new :host => "localhost", :username => "root", :database => "test"
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
            @client.query create_table_sql
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
            def insert_record(args)
         
     | 
| 
       57 
     | 
    
         
            -
              insert_sql = "
         
     | 
| 
       58 
     | 
    
         
            -
                INSERT INTO mysql2_test (
         
     | 
| 
       59 
     | 
    
         
            -
                  null_test, bit_test, tiny_int_test, small_int_test, medium_int_test, int_test, big_int_test,
         
     | 
| 
       60 
     | 
    
         
            -
                  float_test, float_zero_test, double_test, decimal_test, decimal_zero_test, date_test, date_time_test, timestamp_test, time_test,
         
     | 
| 
       61 
     | 
    
         
            -
                  year_test, char_test, varchar_test, binary_test, varbinary_test, tiny_blob_test,
         
     | 
| 
       62 
     | 
    
         
            -
                  tiny_text_test, blob_test, text_test, medium_blob_test, medium_text_test,
         
     | 
| 
       63 
     | 
    
         
            -
                  long_blob_test, long_text_test, enum_test, set_test
         
     | 
| 
       64 
     | 
    
         
            -
                )
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                VALUES (
         
     | 
| 
       67 
     | 
    
         
            -
                  NULL, #{args[:bit_test]}, #{args[:tiny_int_test]}, #{args[:small_int_test]}, #{args[:medium_int_test]}, #{args[:int_test]}, #{args[:big_int_test]},
         
     | 
| 
       68 
     | 
    
         
            -
                  #{args[:float_test]}, #{args[:float_zero_test]}, #{args[:double_test]}, #{args[:decimal_test]}, #{args[:decimal_zero_test]}, '#{args[:date_test]}', '#{args[:date_time_test]}', '#{args[:timestamp_test]}', '#{args[:time_test]}',
         
     | 
| 
       69 
     | 
    
         
            -
                  #{args[:year_test]}, '#{args[:char_test]}', '#{args[:varchar_test]}', '#{args[:binary_test]}', '#{args[:varbinary_test]}', '#{args[:tiny_blob_test]}',
         
     | 
| 
       70 
     | 
    
         
            -
                  '#{args[:tiny_text_test]}', '#{args[:blob_test]}', '#{args[:text_test]}', '#{args[:medium_blob_test]}', '#{args[:medium_text_test]}',
         
     | 
| 
       71 
     | 
    
         
            -
                  '#{args[:long_blob_test]}', '#{args[:long_text_test]}', '#{args[:enum_test]}', '#{args[:set_test]}'
         
     | 
| 
       72 
     | 
    
         
            -
                )
         
     | 
| 
       73 
     | 
    
         
            -
              "
         
     | 
| 
       74 
     | 
    
         
            -
              @client.query insert_sql
         
     | 
| 
       75 
     | 
    
         
            -
            end
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
            puts "Creating #{num} records"
         
     | 
| 
       78 
     | 
    
         
            -
            num.times do |n|
         
     | 
| 
       79 
     | 
    
         
            -
              five_words = Faker::Lorem.words(rand(5))
         
     | 
| 
       80 
     | 
    
         
            -
              twenty5_paragraphs = Faker::Lorem.paragraphs(rand(25))
         
     | 
| 
       81 
     | 
    
         
            -
              insert_record(
         
     | 
| 
       82 
     | 
    
         
            -
                :bit_test => 1,
         
     | 
| 
       83 
     | 
    
         
            -
                :tiny_int_test => rand(128),
         
     | 
| 
       84 
     | 
    
         
            -
                :small_int_test => rand(32767),
         
     | 
| 
       85 
     | 
    
         
            -
                :medium_int_test => rand(8388607),
         
     | 
| 
       86 
     | 
    
         
            -
                :int_test => rand(2147483647),
         
     | 
| 
       87 
     | 
    
         
            -
                :big_int_test => rand(9223372036854775807),
         
     | 
| 
       88 
     | 
    
         
            -
                :float_test => rand(32767)/1.87,
         
     | 
| 
       89 
     | 
    
         
            -
                :float_zero_test => 0.0,
         
     | 
| 
       90 
     | 
    
         
            -
                :double_test => rand(8388607)/1.87,
         
     | 
| 
       91 
     | 
    
         
            -
                :decimal_test => rand(8388607)/1.87,
         
     | 
| 
       92 
     | 
    
         
            -
                :decimal_zero_test => 0,
         
     | 
| 
       93 
     | 
    
         
            -
                :date_test => '2010-4-4',
         
     | 
| 
       94 
     | 
    
         
            -
                :date_time_test => '2010-4-4 11:44:00',
         
     | 
| 
       95 
     | 
    
         
            -
                :timestamp_test => '2010-4-4 11:44:00',
         
     | 
| 
       96 
     | 
    
         
            -
                :time_test => '11:44:00',
         
     | 
| 
       97 
     | 
    
         
            -
                :year_test => Time.now.year,
         
     | 
| 
       98 
     | 
    
         
            -
                :char_test => five_words,
         
     | 
| 
       99 
     | 
    
         
            -
                :varchar_test => five_words,
         
     | 
| 
       100 
     | 
    
         
            -
                :binary_test => five_words,
         
     | 
| 
       101 
     | 
    
         
            -
                :varbinary_test => five_words,
         
     | 
| 
       102 
     | 
    
         
            -
                :tiny_blob_test => five_words,
         
     | 
| 
       103 
     | 
    
         
            -
                :tiny_text_test => Faker::Lorem.paragraph(rand(5)),
         
     | 
| 
       104 
     | 
    
         
            -
                :blob_test => twenty5_paragraphs,
         
     | 
| 
       105 
     | 
    
         
            -
                :text_test => twenty5_paragraphs,
         
     | 
| 
       106 
     | 
    
         
            -
                :medium_blob_test => twenty5_paragraphs,
         
     | 
| 
       107 
     | 
    
         
            -
                :medium_text_test => twenty5_paragraphs,
         
     | 
| 
       108 
     | 
    
         
            -
                :long_blob_test => twenty5_paragraphs,
         
     | 
| 
       109 
     | 
    
         
            -
                :long_text_test => twenty5_paragraphs,
         
     | 
| 
       110 
     | 
    
         
            -
                :enum_test => ['val1', 'val2'].rand,
         
     | 
| 
       111 
     | 
    
         
            -
                :set_test => ['val1', 'val2', 'val1,val2'].rand
         
     | 
| 
       112 
     | 
    
         
            -
              )
         
     | 
| 
       113 
     | 
    
         
            -
              if n % 100 == 0
         
     | 
| 
       114 
     | 
    
         
            -
                $stdout.putc '.'
         
     | 
| 
       115 
     | 
    
         
            -
                $stdout.flush
         
     | 
| 
       116 
     | 
    
         
            -
              end
         
     | 
| 
       117 
     | 
    
         
            -
            end
         
     | 
| 
       118 
     | 
    
         
            -
            puts
         
     | 
| 
       119 
     | 
    
         
            -
            puts "Done"
         
     |