mass_insert 0.0.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.
Files changed (99) hide show
  1. data/.gitignore +17 -0
  2. data/.rspec +1 -0
  3. data/.rvmrc +53 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +13 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +58 -0
  8. data/Rakefile +45 -0
  9. data/lib/mass_insert.rb +13 -0
  10. data/lib/mass_insert/adapters.rb +12 -0
  11. data/lib/mass_insert/adapters/abstract_query.rb +47 -0
  12. data/lib/mass_insert/adapters/adapter.rb +56 -0
  13. data/lib/mass_insert/adapters/column_value.rb +107 -0
  14. data/lib/mass_insert/adapters/helpers.rb +8 -0
  15. data/lib/mass_insert/adapters/helpers/sanitizer.rb +17 -0
  16. data/lib/mass_insert/adapters/helpers/timestamp.rb +38 -0
  17. data/lib/mass_insert/adapters/mysql2_adapter.rb +21 -0
  18. data/lib/mass_insert/adapters/postgresql_adapter.rb +15 -0
  19. data/lib/mass_insert/adapters/sqlite3_adapter.rb +37 -0
  20. data/lib/mass_insert/adapters/sqlserver_adapter.rb +23 -0
  21. data/lib/mass_insert/base.rb +43 -0
  22. data/lib/mass_insert/process_control.rb +24 -0
  23. data/lib/mass_insert/query_builder.rb +42 -0
  24. data/lib/mass_insert/query_execution.rb +29 -0
  25. data/lib/mass_insert/version.rb +3 -0
  26. data/mass_insert.gemspec +22 -0
  27. data/spec/active_record_dummy/.gitignore +15 -0
  28. data/spec/active_record_dummy/Gemfile +40 -0
  29. data/spec/active_record_dummy/README.rdoc +261 -0
  30. data/spec/active_record_dummy/Rakefile +7 -0
  31. data/spec/active_record_dummy/app/assets/images/rails.png +0 -0
  32. data/spec/active_record_dummy/app/assets/javascripts/application.js +15 -0
  33. data/spec/active_record_dummy/app/assets/stylesheets/application.css +13 -0
  34. data/spec/active_record_dummy/app/controllers/application_controller.rb +3 -0
  35. data/spec/active_record_dummy/app/helpers/application_helper.rb +2 -0
  36. data/spec/active_record_dummy/app/mailers/.gitkeep +0 -0
  37. data/spec/active_record_dummy/app/models/.gitkeep +0 -0
  38. data/spec/active_record_dummy/app/models/user.rb +3 -0
  39. data/spec/active_record_dummy/app/views/layouts/application.html.erb +14 -0
  40. data/spec/active_record_dummy/config.ru +4 -0
  41. data/spec/active_record_dummy/config/application.rb +68 -0
  42. data/spec/active_record_dummy/config/boot.rb +6 -0
  43. data/spec/active_record_dummy/config/database.yml +54 -0
  44. data/spec/active_record_dummy/config/environment.rb +5 -0
  45. data/spec/active_record_dummy/config/environments/development.rb +37 -0
  46. data/spec/active_record_dummy/config/environments/mysql2.rb +37 -0
  47. data/spec/active_record_dummy/config/environments/postgresql.rb +37 -0
  48. data/spec/active_record_dummy/config/environments/production.rb +67 -0
  49. data/spec/active_record_dummy/config/environments/sqlite3.rb +37 -0
  50. data/spec/active_record_dummy/config/environments/test.rb +37 -0
  51. data/spec/active_record_dummy/config/initializers/backtrace_silencers.rb +7 -0
  52. data/spec/active_record_dummy/config/initializers/inflections.rb +15 -0
  53. data/spec/active_record_dummy/config/initializers/mime_types.rb +5 -0
  54. data/spec/active_record_dummy/config/initializers/secret_token.rb +7 -0
  55. data/spec/active_record_dummy/config/initializers/session_store.rb +8 -0
  56. data/spec/active_record_dummy/config/initializers/wrap_parameters.rb +14 -0
  57. data/spec/active_record_dummy/config/locales/en.yml +5 -0
  58. data/spec/active_record_dummy/config/routes.rb +58 -0
  59. data/spec/active_record_dummy/db/migrate/20130412154541_create_users.rb +14 -0
  60. data/spec/active_record_dummy/db/schema.rb +27 -0
  61. data/spec/active_record_dummy/db/seeds.rb +7 -0
  62. data/spec/active_record_dummy/lib/assets/.gitkeep +0 -0
  63. data/spec/active_record_dummy/lib/tasks/.gitkeep +0 -0
  64. data/spec/active_record_dummy/log/.gitkeep +0 -0
  65. data/spec/active_record_dummy/public/404.html +26 -0
  66. data/spec/active_record_dummy/public/422.html +26 -0
  67. data/spec/active_record_dummy/public/500.html +25 -0
  68. data/spec/active_record_dummy/public/favicon.ico +0 -0
  69. data/spec/active_record_dummy/public/index.html +241 -0
  70. data/spec/active_record_dummy/public/robots.txt +5 -0
  71. data/spec/active_record_dummy/script/rails +6 -0
  72. data/spec/active_record_dummy/vendor/assets/javascripts/.gitkeep +0 -0
  73. data/spec/active_record_dummy/vendor/assets/stylesheets/.gitkeep +0 -0
  74. data/spec/active_record_dummy/vendor/plugins/.gitkeep +0 -0
  75. data/spec/active_record_models/column_types/binary_spec.rb +60 -0
  76. data/spec/active_record_models/column_types/boolean_spec.rb +52 -0
  77. data/spec/active_record_models/column_types/decimal_spec.rb +49 -0
  78. data/spec/active_record_models/column_types/integer_spec.rb +49 -0
  79. data/spec/active_record_models/column_types/string_spec.rb +50 -0
  80. data/spec/active_record_models/model_spec.rb +50 -0
  81. data/spec/dummy_models/test.rb +5 -0
  82. data/spec/mass_insert/adapters/abstract_query_spec.rb +109 -0
  83. data/spec/mass_insert/adapters/adapter_spec.rb +117 -0
  84. data/spec/mass_insert/adapters/column_value_spec.rb +292 -0
  85. data/spec/mass_insert/adapters/helpers/sanitizer_spec.rb +39 -0
  86. data/spec/mass_insert/adapters/helpers/timestamp_spec.rb +79 -0
  87. data/spec/mass_insert/adapters/helpers_spec.rb +16 -0
  88. data/spec/mass_insert/adapters/mysql_adapter_spec.rb +39 -0
  89. data/spec/mass_insert/adapters/postgresql_adapter_spec.rb +29 -0
  90. data/spec/mass_insert/adapters/sqlite3_adapter_spec.rb +90 -0
  91. data/spec/mass_insert/adapters/sqlserver_adapter_spec.rb +56 -0
  92. data/spec/mass_insert/adapters_spec.rb +40 -0
  93. data/spec/mass_insert/base_spec.rb +98 -0
  94. data/spec/mass_insert/process_control_spec.rb +56 -0
  95. data/spec/mass_insert/query_builder_spec.rb +88 -0
  96. data/spec/mass_insert/query_execution_spec.rb +53 -0
  97. data/spec/mass_insert_spec.rb +28 -0
  98. data/spec/spec_helper.rb +6 -0
  99. metadata +254 -0
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.rvmrc ADDED
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
+ # development environment upon cd'ing into the directory
5
+
6
+ # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
+ # Only full ruby name is supported here, for short names use:
8
+ # echo "rvm use 1.9.3" > .rvmrc
9
+ environment_id="ruby-1.9.3-p392@mass_insert"
10
+
11
+ # Uncomment the following lines if you want to verify rvm version per project
12
+ # rvmrc_rvm_version="1.19.1 (stable)" # 1.10.1 seams as a safe start
13
+ # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
+ # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
+ # return 1
16
+ # }
17
+
18
+ # First we attempt to load the desired environment directly from the environment
19
+ # file. This is very fast and efficient compared to running through the entire
20
+ # CLI and selector. If you want feedback on which environment was used then
21
+ # insert the word 'use' after --create as this triggers verbose mode.
22
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
23
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
24
+ then
25
+ \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
26
+ for __hook in "${rvm_path:-$HOME/.rvm}/hooks/after_use"*
27
+ do
28
+ if [[ -f "${__hook}" && -x "${__hook}" && -s "${__hook}" ]]
29
+ then \. "${__hook}" || true
30
+ fi
31
+ done
32
+ unset __hook
33
+ else
34
+ # If the environment file has not yet been created, use the RVM CLI to select.
35
+ rvm --create "$environment_id" || {
36
+ echo "Failed to create RVM environment '${environment_id}'."
37
+ return 1
38
+ }
39
+ fi
40
+
41
+ # If you use bundler, this might be useful to you:
42
+ # if [[ -s Gemfile ]] && {
43
+ # ! builtin command -v bundle >/dev/null ||
44
+ # builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
45
+ # }
46
+ # then
47
+ # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
48
+ # gem install bundler
49
+ # fi
50
+ # if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
51
+ # then
52
+ # bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
53
+ # fi
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.2"
4
+ - "1.9.3"
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mass_insert.gemspec
4
+ gemspec
5
+
6
+ gem "rails", "3.2.13"
7
+ gem "mysql2"
8
+ gem "sqlite3"
9
+ gem "pg"
10
+
11
+ gem "rspec"
12
+ gem "simplecov"
13
+ gem "rake"
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 TODO: Write your name
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,58 @@
1
+ # MassInsert [![Build Status](https://travis-ci.org/alejandrogutierrez/mass_insert.png?branch=master)](https://travis-ci.org/alejandrogutierrez/mass_insert)
2
+
3
+ This gem aims to provide an easy and faster way to do single database insertions in Rails.
4
+ Support Mysql, PostgreSQL, SQLite3 and SQLServer adapters.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'mass_insert'
11
+
12
+ And then execute:
13
+
14
+ $ bundle install
15
+
16
+ Or install it yourself with:
17
+
18
+ $ gem install mass_insert
19
+
20
+ ## Basic Usage
21
+
22
+ To use MassInsert gem you need to call mass_insert method from your ActiveRecord model and pass it an array with the values that you want to persist into the database.
23
+
24
+ The array of values:
25
+
26
+ values = [
27
+ {
28
+ :name => "Jay",
29
+ :email => "tremendous_gamer@gmail.com",
30
+ :age => 15
31
+ },
32
+ {
33
+ :name => "Beverly",
34
+ :email => "nippy_programmer@gmail.com",
35
+ :age => 24
36
+ },
37
+ {
38
+ :name => "Scottie",
39
+ :email => "angry_programmer@gmail.com",
40
+ :age => 32
41
+ }
42
+ ]
43
+
44
+ And call mass_insert method:
45
+
46
+ User.mass_insert(values)
47
+
48
+ ## Attention
49
+
50
+ Since this is a single database insertion your model validation will be ignored, then if you use this gem you need to be sure that information is OK to be persisted.
51
+
52
+ ## Contributing
53
+
54
+ 1. Fork it
55
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
56
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
57
+ 4. Push to the branch (`git push origin my-new-feature`)
58
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,45 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ namespace :spec do
4
+ desc "Prepares the environment to use the gem"
5
+ task :prepare do
6
+ system("
7
+ bundle install
8
+ cd spec/active_record_dummy/
9
+ bundle install
10
+ rake db:drop db:create db:migrate RAILS_ENV=mysql2
11
+ rake db:drop db:create db:migrate RAILS_ENV=postgresql
12
+ rake db:drop db:create db:migrate RAILS_ENV=sqlite3
13
+ ")
14
+ end
15
+
16
+ desc "Runs all unit tests"
17
+ task :all do
18
+ system("echo '\e[00;32m\033[1mRunning all unit tests...\e[00m'")
19
+ system("bundle exec rspec spec/mass_insert_spec.rb spec/mass_insert")
20
+ end
21
+
22
+ desc "Runs all the mysql2 specs"
23
+ task :mysql2 do
24
+ ENV["RAILS_ENV"] = "mysql2"
25
+ system("echo '\e[00;32m\033[1mRunning the Mysql2 adapter tests...\e[00m'")
26
+ system("bundle exec rspec spec/active_record_models")
27
+ end
28
+
29
+ desc "Runs all the Postgresql specs"
30
+ task :postgresql do
31
+ ENV["RAILS_ENV"] = "postgresql"
32
+ system("echo '\e[00;32m\033[1mRunning the Postgresql adapter tests...\e[00m'")
33
+ system("bundle exec rspec spec/active_record_models")
34
+ end
35
+
36
+ desc "Runs all the Sqlite3 specs"
37
+ task :sqlite3 do
38
+ ENV["RAILS_ENV"] = "sqlite3"
39
+ system("echo '\e[00;32m\033[1mRunning the Sqlite3 adapter tests...\e[00m'")
40
+ system("bundle exec rspec spec/active_record_models")
41
+ end
42
+ end
43
+
44
+
45
+ task default: ['spec:mysql2', 'spec:postgresql', 'spec:sqlite3', 'spec:all']
@@ -0,0 +1,13 @@
1
+ require "mass_insert/version"
2
+
3
+ module MassInsert
4
+ autoload :Adapters, 'mass_insert/adapters.rb'
5
+ autoload :Base, 'mass_insert/base.rb'
6
+ autoload :ProcessControl, 'mass_insert/process_control.rb'
7
+ autoload :QueryBuilder, 'mass_insert/query_builder.rb'
8
+ autoload :QueryExecution, 'mass_insert/query_execution.rb'
9
+ end
10
+
11
+ if defined?(ActiveRecord::Base)
12
+ ActiveRecord::Base.extend MassInsert::Base
13
+ end
@@ -0,0 +1,12 @@
1
+ module MassInsert
2
+ module Adapters
3
+ autoload :Adapter, 'mass_insert/adapters/adapter.rb'
4
+ autoload :AbstractQuery, 'mass_insert/adapters/abstract_query.rb'
5
+ autoload :ColumnValue, 'mass_insert/adapters/column_value.rb'
6
+ autoload :Helpers, 'mass_insert/adapters/helpers.rb'
7
+ autoload :Mysql2Adapter, 'mass_insert/adapters/mysql2_adapter.rb'
8
+ autoload :PostgreSQLAdapter, 'mass_insert/adapters/postgresql_adapter.rb'
9
+ autoload :SQLite3Adapter, 'mass_insert/adapters/sqlite3_adapter.rb'
10
+ autoload :SQLServerAdapter, 'mass_insert/adapters/sqlserver_adapter.rb'
11
+ end
12
+ end
@@ -0,0 +1,47 @@
1
+ module MassInsert
2
+ module Adapters
3
+ module AbstractQuery
4
+
5
+ # Returns a begin string to a basic mysql query insertion. Include
6
+ # the class table_name and it's included in the string.
7
+ def begin_string
8
+ "INSERT INTO #{table_name} "
9
+ end
10
+
11
+ # Returns a string with the column names to the class table name
12
+ # and divided by commmas.
13
+ def string_columns
14
+ "(#{column_names.join(", ")}) "
15
+ end
16
+
17
+ # Returns the string with all the row values that will be included
18
+ # in the sql string.
19
+ def string_values
20
+ "VALUES (#{string_rows_values});"
21
+ end
22
+
23
+ # Gives the correct format to the values string to all rows. This
24
+ # functions calls a function that will generate a single string row
25
+ # and at the end all the strings are concatenated.
26
+ def string_rows_values
27
+ values.map{ |row| string_single_row_values(row) }.join("), (")
28
+ end
29
+
30
+ def string_single_row_values row
31
+ # Prepare the single row to be included in the sql string.
32
+ row.merge!(timestamp_values) if timestamp?
33
+
34
+ # Generates the values to this row that will be included according
35
+ # to the type column and values.
36
+ column_names.map{ |col| string_single_value(row, col) }.join(", ")
37
+ end
38
+
39
+ # Returns a single column string value with the correct format and
40
+ # according to the database configuration, column type and presence.
41
+ def string_single_value row, column
42
+ ColumnValue.new(row, column, options).build
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,56 @@
1
+ module MassInsert
2
+ module Adapters
3
+ # This class provides some helper methods to build the sql string that
4
+ # be executed. The methods here provides a functionality that be required
5
+ # in all the adapters.
6
+ class Adapter
7
+ include AbstractQuery
8
+ include Helpers::Timestamp
9
+ include Helpers::Sanitizer
10
+
11
+ attr_accessor :values, :options, :column_names
12
+
13
+ def initialize values, options
14
+ @values = values
15
+ @options = options
16
+ end
17
+
18
+ # Returns the class like a constant that invokes the mass insert.
19
+ # Should be a class that inherits from ActiveRecord::Base.
20
+ def class_name
21
+ options[:class_name]
22
+ end
23
+
24
+ # Returns a string with the database table name where all the records
25
+ # will be saved.
26
+ def table_name
27
+ options[:table_name]
28
+ end
29
+
30
+ # Returns an array with the column names in the database table like
31
+ # a symbols.
32
+ def table_columns
33
+ class_name.column_names.map(&:to_sym)
34
+ end
35
+
36
+ # Returns the array with the column names valid to be included into the
37
+ # query string according to the options.
38
+ def column_names
39
+ @column_names ||= sanitized_columns
40
+ end
41
+
42
+ # Returns the primary_key column that was configured by the user.
43
+ # Default primary_key it's id
44
+ def primary_key
45
+ options[:primary_key]
46
+ end
47
+
48
+ # Returns the primary key mode according to the user configuration.
49
+ # Default primary key mode it's automatic.
50
+ def primary_key_mode
51
+ options[:primary_key_mode]
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,107 @@
1
+ module MassInsert
2
+ module Adapters
3
+ class ColumnValue
4
+
5
+ attr_accessor :row, :column, :options
6
+
7
+ def initialize row, column, options
8
+ @row = row
9
+ @column = column
10
+ @options = options
11
+ end
12
+
13
+ # Returns the class that invokes the mass insert process. The class
14
+ # is in the options hash.
15
+ def class_name
16
+ options[:class_name]
17
+ end
18
+
19
+ # Returns a symbol with the column type in the database. The column or
20
+ # attribute should belongs to the class that invokes the mass insert.
21
+ def column_type
22
+ class_name.columns_hash[@column.to_s].type
23
+ end
24
+
25
+ # Returns the value to this column in the row hash. The value is
26
+ # finding by symbol or string key to be most flexible.
27
+ def column_value
28
+ row[column.to_sym]
29
+ end
30
+
31
+ # Returns the string with the database adapter name usually in the
32
+ # database.yml file in your Rails project.
33
+ def adapter
34
+ ActiveRecord::Base.connection.instance_values["config"][:adapter]
35
+ end
36
+
37
+ # Returns the default value string to be included in query string.
38
+ # This default value is added to the query if the row hash does not
39
+ # contains the database column value.
40
+ def default_value
41
+ default_db_value ? default_db_value.to_s : "null"
42
+ end
43
+
44
+ # Return the database default value using methods that ActiveRecord
45
+ # provides to see database columns settings.
46
+ def default_db_value
47
+ class_name.columns_hash[@column.to_s].default
48
+ end
49
+
50
+ # Returns a single column string value with the correct format and
51
+ # according to the database configuration, column type and presence.
52
+ def build
53
+ self.send "column_value_#{column_type}".to_sym
54
+ end
55
+
56
+ # Returns the correct value when the column value is string, text,
57
+ # date, time, datetime, timestamp. There are alias method to the
58
+ # other column types that need a similar query value.
59
+ def column_value_string
60
+ column_value.nil? ? default_value : "'#{column_value}'"
61
+ end
62
+ alias :column_value_text :column_value_string
63
+ alias :column_value_date :column_value_string
64
+ alias :column_value_time :column_value_string
65
+ alias :column_value_datetime :column_value_string
66
+ alias :column_value_timestamp :column_value_string
67
+ alias :column_value_binary :column_value_string
68
+
69
+ # Returns the correct value to column value is integer. If the row
70
+ # hash does not include the value to this column return the default
71
+ # value according to database configuration.
72
+ def column_value_integer
73
+ column_value.nil? ? default_value : column_value.to_i.to_s
74
+ end
75
+
76
+ # Returns the correct value to column value is decimal. There is an
77
+ # alias method to float type. If the row hash does not include the
78
+ # value to this column return the default value according to database
79
+ # configuration.
80
+ def column_value_decimal
81
+ column_value.nil? ? default_value : column_value.to_f.to_s
82
+ end
83
+ alias :column_value_float :column_value_decimal
84
+
85
+ # Returns the correct value to column value is boolean. If the row
86
+ # hash does not include the value to this column return the default
87
+ # value according to database configuration.
88
+ def column_value_boolean
89
+ case adapter
90
+ when "mysql2", "postgresql", "sqlserver"
91
+ if column_value.nil?
92
+ default_value
93
+ else
94
+ column_value ? "true" : "false"
95
+ end
96
+ when "sqlite3"
97
+ if column_value.nil?
98
+ default_value
99
+ else
100
+ column_value ? "1" : "0"
101
+ end
102
+ end
103
+ end
104
+
105
+ end
106
+ end
107
+ end