dohmysql 0.1.2 → 0.1.3

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.
data/bin/makedb CHANGED
@@ -5,9 +5,9 @@ require 'doh/mysql/database_creator'
5
5
 
6
6
  opts = Doh::Options.new(
7
7
  {'drop_first' => [false, "-z", "--drop_first", "if true, will drop the database or tables before creating"] \
8
- ,'database' => [Doh::config['primary_database'], "-d", "--database <database>", "name of the source database -- defaults to config['primary_database'], currently '#{Doh::config['primary_database']}'"] \
8
+ ,'database' => [Doh::config[:default_database], "-d", "--database <database>", "name of the source database -- defaults to Doh::config[:default_database], currently '#{Doh::config[:default_database]}'"] \
9
9
  ,'all' => [false, "-a", "--all", "create all databases"] \
10
- ,'target' => [Doh::config['target_database'], "-g", "--target <database>", "name of the target database -- defaults to same as source"] \
10
+ ,'target' => [nil, "-g", "--target <database>", "name of the target database -- defaults to same as source"] \
11
11
  ,'tables' => [nil, "-t", "--tables <tables>", "comma-delimited list of tables to create; if specified, no databases are dropped or created"]
12
12
  })
13
13
 
@@ -1,4 +1,4 @@
1
- require 'doh/core_ext/class/force_deep_copy'
1
+ require 'doh/core_ext/force_deep_copy'
2
2
 
3
3
  module DohDb
4
4
 
@@ -58,10 +58,6 @@ class AbstractRow
58
58
  return val.nil? || (val.respond_to?(:empty?) && val.empty?)
59
59
  end
60
60
 
61
- def record_id
62
- get('id')
63
- end
64
-
65
61
  protected
66
62
  def parse_initialize_args(*args)
67
63
  if args.empty?
@@ -1,21 +1,13 @@
1
- require 'mysql2'
2
1
  require 'doh/mysql/handle'
3
- require 'doh/mysql/typed_row_builder'
4
- Mysql2::Client.default_query_options[:cast_booleans] = true
5
2
 
6
3
  module DohDb
7
4
 
8
5
  class CacheConnector
9
- attr_accessor :host, :username, :password, :database, :row_builder, :timeout, :port
10
-
11
- def initialize(host = nil, username = nil, password = nil, database = nil, row_builder = nil)
12
- @host = host
13
- @username = username
14
- @password = password
15
- @database = database
16
- @timeout = 1800
17
- @port = nil
18
- @row_builder = row_builder || TypedRowBuilder.new
6
+ attr_accessor :config
7
+
8
+ def initialize(config)
9
+ @config = config
10
+ @config[:timeout] ||= 1800
19
11
  end
20
12
 
21
13
  def request_handle(database = nil)
@@ -40,15 +32,15 @@ private
40
32
  end
41
33
 
42
34
  def get_new_handle(database = nil)
43
- database ||= @database
44
- dbmsg = database.to_s.strip.empty? ? 'no default database' : "database #{database}"
45
- dohlog.info("connecting to #@host port #@port as username #@username, #{dbmsg}")
46
- mysqlh = Mysql2::Client.new(:host => @host, :username => @username, :password => @password, :database => database, :port => @port)
47
- Handle.new(mysqlh, @row_builder)
35
+ local_config = @config.dup
36
+ local_config[:database] = database if database
37
+ dohlog.info("connecting with config: #{local_config}")
38
+ local_config.delete(:timeout)
39
+ Handle.new(local_config)
48
40
  end
49
41
 
50
42
  def passed_timeout?
51
- Time.now > @last_used + @timeout
43
+ Time.now > @last_used + @config[:timeout]
52
44
  end
53
45
  end
54
46
 
@@ -32,12 +32,16 @@ def self.insert(statement)
32
32
  request_handle.insert(statement)
33
33
  end
34
34
 
35
- def self.insert_hash(hash, table, ignore = nil)
36
- request_handle.insert_hash(hash, table, ignore)
35
+ def self.insert_hash(hash, table, quote_strings = true)
36
+ request_handle.insert_hash(hash, table, quote_strings)
37
37
  end
38
38
 
39
- def self.replace_hash(hash, table)
40
- request_handle.replace_hash(hash, table)
39
+ def self.insert_ignore_hash(hash, table, quote_strings = true)
40
+ request_handle.insert_ignore_hash(hash, table, quote_strings)
41
+ end
42
+
43
+ def self.replace_hash(hash, table, quote_strings = true)
44
+ request_handle.replace_hash(hash, table, quote_strings)
41
45
  end
42
46
 
43
47
  def self.select(statement, row_builder = nil)
@@ -1,36 +1,35 @@
1
1
  require 'doh/core_ext/dir'
2
2
  require 'doh/mysql/handle'
3
3
  require 'doh/mysql/load_sql'
4
- require 'doh/mysql/version'
5
- require 'doh/mysql/types'
4
+ require 'yaml'
6
5
 
7
6
  module DohDb
8
7
 
9
8
  class DatabaseCreator
10
- def initialize(data_directory = nil, connector = nil)
11
- @data_directory = data_directory || File.join(Doh::root, 'database')
9
+ def initialize(sqlfiles_directory = nil, connector = nil)
10
+ @sqlfiles_directory = sqlfiles_directory || File.join(Doh::root, 'database')
12
11
  @connector = connector || DohDb::connector_instance
13
12
  @include_scripts = true
14
13
  end
15
14
 
16
15
  def create_database(dbname, drop_first = false)
17
- create_one_database(get_nodb_handle, dbname, dbname, drop_first)
16
+ create_one_database(get_handle(''), dbname, dbname, drop_first)
18
17
  end
19
18
 
20
19
  def create_database_copy(dest_db, source_db, drop_first = false)
21
- create_one_database(get_nodb_handle, dest_db, source_db, drop_first)
20
+ create_one_database(get_handle(''), dest_db, source_db, drop_first)
22
21
  end
23
22
 
24
23
  def create_all_databases(drop_first = false)
25
- dbh = get_nodb_handle
26
- Dir.directories(@data_directory).each {|elem| create_one_database(dbh, elem, elem, drop_first)}
24
+ dbh = get_handle('')
25
+ Dir.directories(@sqlfiles_directory).each {|elem| create_one_database(dbh, elem, elem, drop_first)}
27
26
  end
28
27
 
29
28
  def create_tables(database, drop_first, *table_and_view_names)
30
- @connector.database = database
29
+ dbh = get_handle(database)
31
30
  views, tables = table_and_view_names.flatten.sort.partition {|name| File.exist?(sql_filename(database, 'views', name))}
32
- tables.each {|name| create_base_table(database, name, drop_first)}
33
- views.each {|name| create_view(database, name, drop_first)}
31
+ tables.each {|name| create_base_table(dbh, database, name, drop_first)}
32
+ views.each {|name| create_view(dbh, database, name, drop_first)}
34
33
  end
35
34
 
36
35
  def exclude_scripts
@@ -39,56 +38,53 @@ class DatabaseCreator
39
38
  end
40
39
 
41
40
  private
42
- def get_nodb_handle
41
+ def get_handle(database)
43
42
  @connector.reset
44
- @connector.database = ''
43
+ @connector.config[:database] = database
45
44
  @connector.request_handle
46
45
  end
47
46
 
48
47
  def sql_filename(database, subdir, name)
49
- File.join(@data_directory, database, subdir, name) + '.sql'
48
+ File.join(@sqlfiles_directory, database, subdir, name) + '.sql'
50
49
  end
51
50
 
52
51
  def find_files(source_db, subdir, ext = '.sql')
53
- path = File.join(@data_directory, source_db, subdir)
52
+ path = File.join(@sqlfiles_directory, source_db, subdir)
54
53
  return [] unless File.exist?(path)
55
54
  Dir.entries(path).find_all {|entry| entry.end_with?(ext)}.sort.collect {|elem| File.join(path, elem)}
56
55
  end
57
56
 
58
57
  def view_files(source_db)
59
- path = File.join(@data_directory, source_db, 'views')
58
+ path = File.join(@sqlfiles_directory, source_db, 'views')
60
59
  return [] unless File.exist?(path)
61
60
  ordered_filenames = YAML.load_file(File.join(path, 'order.yml')).collect {|uqfn| File.join(path, uqfn) + '.sql'}
62
61
  ordered_filenames + (find_files(source_db, 'views') - ordered_filenames)
63
62
  end
64
63
 
65
- def create_base_table(database, table_name, drop_first)
66
- DohDb::query("DROP TABLE IF EXISTS #{table_name}") if drop_first
64
+ def create_base_table(dbh, database, table_name, drop_first)
65
+ dbh.query("DROP TABLE IF EXISTS #{table_name}") if drop_first
67
66
  files = [sql_filename(database, 'tables', table_name)]
68
67
  inserts_file = sql_filename(database, 'insert_sql', table_name)
69
68
  files.push(inserts_file) if File.exist?(inserts_file)
70
- DohDb::load_sql_connector(files, DohDb::connector_instance)
69
+ DohDb::load_sql(dbh.config, files)
71
70
  end
72
71
 
73
- def create_view(database, view_name, drop_first)
74
- DohDb::query("DROP VIEW IF EXISTS #{view_name}") if drop_first
75
- DohDb::load_sql_connector([sql_filename(database, 'views', view_name)], DohDb::connector_instance)
72
+ def create_view(dbh, database, view_name, drop_first)
73
+ dbh.query("DROP VIEW IF EXISTS #{view_name}") if drop_first
74
+ DohDb::load_sql(dbh.config, [sql_filename(database, 'views', view_name)])
76
75
  end
77
76
 
78
77
  def create_one_database(dbh, dest_db, source_db, drop_first)
79
- dohlog.info("creating database " + dest_db + " from source files at " + File.join(@data_directory, source_db))
78
+ dohlog.info("creating database " + dest_db + " from source files at " + File.join(@sqlfiles_directory, source_db))
80
79
  dbh.query("DROP DATABASE IF EXISTS " + dest_db) if drop_first
81
80
 
82
81
  dbh.query("CREATE DATABASE " + dest_db)
83
82
  dbh.query("USE " + dest_db)
84
- dbh.query("CREATE TABLE version (version INT UNSIGNED NOT NULL) ENGINE=MyISAM")
85
- dbver = DohDb::latest_database_version(source_db)
86
- dbh.query("INSERT INTO version VALUES (#{dbver})")
87
83
 
88
- @connector.database = dest_db
84
+ @connector.config[:database] = dest_db
89
85
 
90
86
  files = find_files(source_db, 'tables') + find_files(source_db, 'insert_sql') + view_files(source_db)
91
- DohDb::load_sql_connector(files, @connector, dest_db)
87
+ DohDb::load_sql(@connector.config, files)
92
88
  return unless @include_scripts
93
89
  find_files(source_db, 'insert_scripts', '.rb').each do |filename|
94
90
  dohlog.info("loading file: #{filename}")
@@ -1,3 +1,4 @@
1
+ require 'doh/core_ext/date'
1
2
  require 'doh/core_ext/datewithtime'
2
3
  require 'doh/mysql/to_sql'
3
4
 
@@ -16,12 +17,12 @@ class DateTimeNow < DateTime
16
17
  end
17
18
 
18
19
  def self.today
19
- day = Date.today
20
+ day = Date.utcday
20
21
  DateToday.new(day.year, day.month, day.mday)
21
22
  end
22
23
 
23
24
  def self.now
24
- dt = DateTime.now.utc
25
+ dt = DateTime.utcnow
25
26
  DateTimeNow.new(dt.year, dt.month, dt.mday, dt.hour, dt.min, dt.sec, dt.zone)
26
27
  end
27
28
 
@@ -1,3 +1,4 @@
1
+ require 'mysql2'
1
2
  require 'doh/array_to_hash'
2
3
  require 'doh/log/stub'
3
4
  require 'doh/mysql/error'
@@ -6,18 +7,22 @@ require 'doh/mysql/writable_row'
6
7
  require 'doh/mysql/hash_row'
7
8
  require 'doh/mysql/smart_row'
8
9
  require 'doh/mysql/to_sql'
10
+ Mysql2::Client.default_query_options[:cast_booleans] = true
9
11
 
10
12
  module DohDb
11
13
 
12
14
  class Handle
13
- def initialize(mysqlh, row_builder = nil)
14
- @mysqlh = mysqlh
15
- @row_builder = row_builder || TypedRowBuilder.new
15
+ attr_reader :config, :mysqlh
16
+
17
+ def initialize(config)
18
+ @config = config
19
+ @mysqlh = Mysql2::Client.new(@config)
20
+ dohlog.info("new connection created: id #{@mysqlh.thread_id}")
16
21
  end
17
22
 
18
23
  def close
19
24
  unless closed?
20
- dohlog.info("closing raw mysql handle: #@mysqlh")
25
+ dohlog.info("closing connection: id #{@mysqlh.thread_id}")
21
26
  @mysqlh.close
22
27
  @mysqlh = nil
23
28
  end
@@ -59,13 +64,16 @@ class Handle
59
64
  retval
60
65
  end
61
66
 
62
- def insert_hash(hash, table, ignore = nil)
63
- if ignore then keyword = 'INSERT IGNORE' else keyword = 'INSERT' end
64
- insert_hash_helper(hash, table, keyword)
67
+ def insert_hash(hash, table, quote_strings = true)
68
+ insert_hash_helper(hash, table, 'INSERT', quote_strings)
69
+ end
70
+
71
+ def insert_ignore_hash(hash, table, quote_strings = true)
72
+ insert_hash_helper(hash, table, 'INSERT IGNORE', quote_strings)
65
73
  end
66
74
 
67
- def replace_hash(hash, table)
68
- insert_hash_helper(hash, table, 'REPLACE')
75
+ def replace_hash(hash, table, quote_strings = true)
76
+ insert_hash_helper(hash, table, 'REPLACE', quote_strings)
69
77
  end
70
78
 
71
79
  # The most generic form of select.
@@ -150,12 +158,12 @@ private
150
158
  raise
151
159
  end
152
160
 
153
- def insert_hash_helper(hash, table, keyword)
161
+ def insert_hash_helper(hash, table, keyword, quote_strings)
154
162
  names = []
155
163
  values = []
156
164
  hash.each_pair do |key, value|
157
165
  names.push(key)
158
- values.push(value.to_sql)
166
+ values.push(if quote_strings || !value.is_a?(String) then value.to_sql else value end)
159
167
  end
160
168
 
161
169
  insert("#{keyword} INTO #{table} (#{names.join(',')}) VALUES (#{values.join(',')})")
@@ -163,7 +171,7 @@ private
163
171
 
164
172
  def get_row_builder(row_builder = nil)
165
173
  if row_builder.nil?
166
- @row_builder
174
+ TypedRowBuilder.new
167
175
  elsif row_builder == :read
168
176
  TypedRowBuilder.new(ReadOnlyRow)
169
177
  elsif row_builder == :hash
@@ -3,12 +3,11 @@ require 'doh/mysql/connector_instance'
3
3
  module DohDb
4
4
 
5
5
  def self.mysql_arg(value, option_specifier)
6
- return '' if value.to_s.strip.empty?
7
- ' -' + option_specifier + value
6
+ if value.to_s.strip.empty? then '' else " -#{option_specifier}#{value}" end
8
7
  end
9
8
 
10
- def self.load_sql(filenames, host, username, password, database)
11
- mysqlcmd = 'mysql' + mysql_arg(host, 'h') + mysql_arg(username, 'u') + mysql_arg(password, 'p') + ' ' + database
9
+ def self.load_sql(dbconfig, filenames)
10
+ mysqlcmd = 'mysql' + mysql_arg(dbconfig[:host], 'h') + mysql_arg(dbconfig[:username], 'u') + mysql_arg(dbconfig[:password], 'p') + ' ' + dbconfig[:database]
12
11
  io = IO::popen(mysqlcmd, 'r+')
13
12
  dohlog.debug("loading sql file: " + filenames.first) if filenames.size == 1
14
13
  filenames.each do |elem|
@@ -17,10 +16,5 @@ def self.load_sql(filenames, host, username, password, database)
17
16
  io.close
18
17
  end
19
18
 
20
- def self.load_sql_connector(filenames, connector = nil, alternate_database = nil)
21
- connector ||= DohDb::connector_instance
22
- load_sql(filenames, connector.host, connector.username, connector.password, alternate_database || connector.database)
23
- end
24
-
25
19
  end
26
20
 
@@ -1,14 +1,13 @@
1
- require 'doh/mysql'
2
- require 'doh/mysql/to_sql'
1
+ require 'doh/mysql/connector_instance'
3
2
 
4
3
  module DohDb
5
4
 
6
5
  @@cached_column_info = {}
7
6
  def self.column_info(table, database = nil)
8
- database ||= DohDb::connector_instance.database
7
+ database ||= DohDb::connector_instance.config[:database]
9
8
  lookup_str = database + '.' + table
10
9
  return @@cached_column_info[lookup_str] if @@cached_column_info[lookup_str]
11
- stmt = "SELECT column_name, is_nullable, data_type, character_maximum_length, numeric_scale, column_type FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=#{database.to_sql} AND TABLE_NAME=#{table.to_sql}"
10
+ stmt = "SELECT column_name, is_nullable, data_type, character_maximum_length, numeric_scale, column_type FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='#{database}' AND TABLE_NAME='#{table}'"
12
11
  @@cached_column_info[lookup_str] = DohDb::select_transpose(stmt)
13
12
  end
14
13
 
@@ -40,12 +39,12 @@ def self.find_primary_key(table, database = nil)
40
39
  database = table.before('.')
41
40
  table = table.after('.')
42
41
  else
43
- database ||= DohDb::connector_instance.database
42
+ database ||= DohDb::connector_instance.config[:database]
44
43
  end
45
44
 
46
45
  dbhash = @@primary_keys[database]
47
46
  if dbhash.nil?
48
- dbhash = DohDb::select_transpose("SELECT table_name, column_name FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=#{database.to_sql} AND ORDINAL_POSITION=1")
47
+ dbhash = DohDb::select_transpose("SELECT table_name, column_name FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='#{database}' AND ORDINAL_POSITION=1")
49
48
  raise "no information found for database #{database}" if dbhash.empty?
50
49
  @@primary_keys[database] = dbhash
51
50
  end
@@ -65,7 +64,7 @@ end
65
64
 
66
65
  @@tables_by_database = {}
67
66
  def self.all_tables(database = nil)
68
- database ||= DohDb::connector_instance.database
67
+ database ||= DohDb::connector_instance.config[:database]
69
68
  @@tables_by_database[database] ||
70
69
  @@tables_by_database[database] ||= DohDb::select_list("SELECT table_name FROM information_schema.tables WHERE table_schema = '#{database}'")
71
70
  end
@@ -1,6 +1,7 @@
1
1
  require 'doh/mysql/writable_row'
2
2
  require 'doh/to_display'
3
3
  require 'doh/mysql/virtual'
4
+ require 'sqlstmt/update'
4
5
 
5
6
  module DohDb
6
7
 
@@ -81,10 +82,6 @@ class AbstractSmartRow < AbstractRow
81
82
  @values.delete_at(index)
82
83
  end
83
84
 
84
- def record_id=(value)
85
- set(primary_key, value)
86
- end
87
-
88
85
  def db_insert
89
86
  newid = DohDb::insert_hash(self, @table)
90
87
  if newid != 0
@@ -96,8 +93,9 @@ class AbstractSmartRow < AbstractRow
96
93
  def db_update
97
94
  return if @changed_keys.empty?
98
95
  before_db_update
99
- builder = BuildSQL::SimpleUpdateRow.new(@table, nil, get(primary_key), primary_key)
100
- @changed_keys.each {|key| builder.setc(key, get(key).to_sql)}
96
+ builder = SqlStmt::Update.new.table(@table)
97
+ builder.where("#{primary_key} = #{get(primary_key).to_sql}")
98
+ @changed_keys.each {|key| builder.field(key, get(key).to_sql)}
101
99
  DohDb::query(builder)
102
100
  after_db_update
103
101
  @changed_keys.clear
data/lib/doh/mysql.rb CHANGED
@@ -4,4 +4,3 @@ require 'doh/mysql/handle'
4
4
  require 'doh/mysql/to_sql'
5
5
  require 'doh/mysql/db_date'
6
6
  require 'doh/mysql/unquoted'
7
- require 'doh/mysql/activate'
@@ -1,20 +1,19 @@
1
- require_relative 'db_unit_test'
1
+ require 'doh/mysql/cache_connector'
2
+ require_relative 'helpers'
2
3
 
3
4
  module DohDb
4
5
 
5
6
  class Test_CacheConnector < DohTest::TestGroup
6
7
  def create_table
7
- @cc.request_handle.query("CREATE TEMPORARY TABLE #@tbl (id INT AUTO_INCREMENT KEY)")
8
+ @cc.request_handle.query("CREATE TEMPORARY TABLE #{tbl} (id INT AUTO_INCREMENT KEY)")
8
9
  end
9
10
 
10
11
  def insert_record
11
- @cc.request_handle.insert("INSERT INTO #@tbl (id) VALUES (null)")
12
+ @cc.request_handle.insert("INSERT INTO #{tbl} (id) VALUES (NULL)")
12
13
  end
13
14
 
14
15
  def test_stuff
15
- sharedcc = DohDb::connector_instance
16
- @cc = DohDb::CacheConnector.new(sharedcc.host, sharedcc.username, sharedcc.password, sharedcc.database, sharedcc.row_builder)
17
- @tbl = 'doh_mysql_cache_connector_stuff_test'
16
+ @cc = DohDb::CacheConnector.new(dbcfg)
18
17
 
19
18
  create_table
20
19
  assert_equal(1, insert_record)
@@ -22,10 +21,10 @@ class Test_CacheConnector < DohTest::TestGroup
22
21
  dbh = @cc.request_handle
23
22
  assert_equal(2, insert_record)
24
23
  dbh.close
25
- # temporary table gets deleted on handle close
24
+
25
+ # temporary table should get deleted when the connection closes
26
26
  create_table
27
27
 
28
- #test it resets the handle
29
28
  @cc.reset
30
29
  create_table
31
30
  @cc.reset
@@ -33,7 +32,7 @@ class Test_CacheConnector < DohTest::TestGroup
33
32
 
34
33
  # test it still works after timeout
35
34
  create_table
36
- @cc.timeout = -1
35
+ @cc.config[:timeout] = -1
37
36
  create_table
38
37
  end
39
38
  end
@@ -1,10 +1,11 @@
1
- require_relative 'db_unit_test'
1
+ require 'doh/mysql/connector_instance'
2
+ require_relative 'helpers'
2
3
 
3
4
  module DohDb
4
5
 
5
6
  class Test_ConnectorInstance < DohTest::TestGroup
6
7
  def test_stuff
7
- tbl = "doh_mysql_connector_instance_stuff_test"
8
+ init_global_connector
8
9
  DohDb::query("CREATE TEMPORARY TABLE #{tbl} (id INT UNSIGNED AUTO_INCREMENT NOT NULL KEY, value INT NOT NULL DEFAULT 0, created_on DATE, created_at DATETIME, money DECIMAL(7,2) NOT NULL DEFAULT 0)")
9
10
  assert_equal(1, DohDb::insert("INSERT INTO #{tbl} (id, created_on, created_at, money) VALUES (null, CURDATE(), '2007-01-01 10:30:05', 10.5)"))
10
11
  assert_equal(2, DohDb::insert("INSERT INTO #{tbl} (id, created_on) VALUES (null, 0)"))
data/test/handle.dt.rb CHANGED
@@ -1,12 +1,11 @@
1
- require_relative 'db_unit_test'
2
- require 'doh/core_ext/hash'
1
+ require_relative 'helpers'
2
+ require 'doh/mysql/handle'
3
3
 
4
4
  module DohDb
5
5
 
6
6
  class Test_Handle < DohTest::TestGroup
7
7
  def test_stuff
8
- dbh = DohDb::request_handle
9
- tbl = "doh_mysql_handle_stuff_test"
8
+ dbh = get_dbh
10
9
  dbh.query("CREATE TEMPORARY TABLE #{tbl} (id INT UNSIGNED AUTO_INCREMENT NOT NULL KEY, value INT NOT NULL DEFAULT 0, created_on DATE, created_at DATETIME, money DECIMAL(7,2) NOT NULL DEFAULT 0)")
11
10
  assert_equal(1, dbh.insert("INSERT INTO #{tbl} (id, created_on, created_at, money) VALUES (null, CURDATE(), '2007-01-01 10:30:05', 10.5)"))
12
11
  assert_equal(2, dbh.insert("INSERT INTO #{tbl} (id, created_on, created_at) VALUES (null, 0, 0)"))
@@ -18,48 +17,44 @@ class Test_Handle < DohTest::TestGroup
18
17
  end
19
18
 
20
19
  def test_select_transpose_2fields
21
- dbh = DohDb::request_handle
22
- tbl = "doh_mysql_handle_select_transpose_2fields_test"
23
- DohDb::query("CREATE TEMPORARY TABLE #{tbl} (field CHAR(30) NOT NULL, value CHAR(30) NOT NULL)")
24
- DohDb::query("INSERT INTO #{tbl} SET field = 'some_name', value = 'some_value'")
25
- DohDb::query("INSERT INTO #{tbl} SET field = 'other_name', value = 'matching_other_value'")
26
- DohDb::query("INSERT INTO #{tbl} SET field = 'yet_another_name', value = 'strange_value'")
27
- hash = DohDb::select_transpose("SELECT field, value FROM #{tbl}")
20
+ dbh = get_dbh
21
+ dbh.query("CREATE TEMPORARY TABLE #{tbl} (field CHAR(30) NOT NULL, value CHAR(30) NOT NULL)")
22
+ dbh.query("INSERT INTO #{tbl} SET field = 'some_name', value = 'some_value'")
23
+ dbh.query("INSERT INTO #{tbl} SET field = 'other_name', value = 'matching_other_value'")
24
+ dbh.query("INSERT INTO #{tbl} SET field = 'yet_another_name', value = 'strange_value'")
25
+ hash = dbh.select_transpose("SELECT field, value FROM #{tbl}")
28
26
  assert_equal('some_value', hash['some_name'])
29
27
  assert_equal('matching_other_value', hash['other_name'])
30
28
  assert_equal('strange_value', hash['yet_another_name'])
31
29
  end
32
30
 
33
31
  def test_select_transpose_3fields
34
- dbh = DohDb::request_handle
35
- tbl = "doh_mysql_handle_select_transpose_3fields_test"
36
- DohDb::query("CREATE TEMPORARY TABLE #{tbl} (field CHAR(30), some_value CHAR(30), other_value CHAR(30))")
37
- DohDb::query("INSERT INTO #{tbl} SET field = 'some_name', some_value = 'some_value', other_value = 'blah'")
38
- DohDb::query("INSERT INTO #{tbl} SET field = 'other_name', some_value = 'matching_other_value', other_value = 'blee'")
39
- DohDb::query("INSERT INTO #{tbl} SET field = 'yet_another_name', some_value = 'strange_value', other_value = 'bloo'")
40
- hash = DohDb::select_transpose("SELECT field, some_value, other_value FROM #{tbl}")
32
+ dbh = get_dbh
33
+ dbh.query("CREATE TEMPORARY TABLE #{tbl} (field CHAR(30), some_value CHAR(30), other_value CHAR(30))")
34
+ dbh.query("INSERT INTO #{tbl} SET field = 'some_name', some_value = 'some_value', other_value = 'blah'")
35
+ dbh.query("INSERT INTO #{tbl} SET field = 'other_name', some_value = 'matching_other_value', other_value = 'blee'")
36
+ dbh.query("INSERT INTO #{tbl} SET field = 'yet_another_name', some_value = 'strange_value', other_value = 'bloo'")
37
+ hash = dbh.select_transpose("SELECT field, some_value, other_value FROM #{tbl}")
41
38
  assert_equal(hash['some_name'], {'some_value' => 'some_value', 'other_value' => 'blah'})
42
39
  assert_equal(hash['other_name'], {'some_value' => 'matching_other_value', 'other_value' => 'blee'})
43
40
  assert_equal(hash['yet_another_name'], {'some_value' => 'strange_value', 'other_value' => 'bloo'})
44
41
  end
45
42
 
46
43
  def test_select_values
47
- dbh = DohDb::request_handle
48
- tbl = "doh_mysql_handle_select_values_test"
49
- DohDb::query("CREATE TEMPORARY TABLE #{tbl} (field CHAR(30), some_value CHAR(30))")
50
- DohDb::query("INSERT INTO #{tbl} SET field = 'some_name', some_value = 'some_value'")
51
- assert_equal([['some_name', 'some_value']], DohDb::select_values("SELECT field, some_value FROM #{tbl}"))
52
- assert_equal([['some_name']], DohDb::select_values("SELECT field FROM #{tbl}"))
44
+ dbh = get_dbh
45
+ dbh.query("CREATE TEMPORARY TABLE #{tbl} (field CHAR(30), some_value CHAR(30))")
46
+ dbh.query("INSERT INTO #{tbl} SET field = 'some_name', some_value = 'some_value'")
47
+ assert_equal([['some_name', 'some_value']], dbh.select_values("SELECT field, some_value FROM #{tbl}"))
48
+ assert_equal([['some_name']], dbh.select_values("SELECT field FROM #{tbl}"))
53
49
  end
54
50
 
55
51
  def test_insert_hash
56
- dbh = DohDb::request_handle
57
- tbl = "doh_mysql_insert_hash_test"
52
+ dbh = get_dbh
58
53
  dbh.query("CREATE TEMPORARY TABLE #{tbl} (value INT KEY)")
59
54
  hash1 = {'value' => 1}
60
55
  assert_equal(0, dbh.insert_hash(hash1, tbl))
61
56
  assert_raises(Mysql2::Error) { dbh.insert_hash(hash1, tbl) }
62
- assert_equal(0, dbh.insert_hash(hash1, tbl, true))
57
+ assert_equal(0, dbh.insert_ignore_hash(hash1, tbl))
63
58
  end
64
59
  end
65
60
 
data/test/helpers.rb ADDED
@@ -0,0 +1,32 @@
1
+ module InternalTestHelpers
2
+ def dbcfg
3
+ { :host => 'localhost', :username => 'root', :database => 'test' }
4
+ end
5
+
6
+ def tbl
7
+ @tbl ||= self.class.to_s.gsub(/:/, '_').downcase
8
+ end
9
+
10
+ def drop_stmt
11
+ "DROP TABLE IF EXISTS #{tbl}"
12
+ end
13
+
14
+ def drop_tbl
15
+ get_dbh.query("DROP TABLE IF EXISTS #{tbl}")
16
+ end
17
+
18
+ def get_dbh
19
+ require 'doh/mysql/handle'
20
+ DohDb::Handle.new(dbcfg)
21
+ end
22
+
23
+ def init_global_connector
24
+ require 'doh/mysql/connector_instance'
25
+ require 'doh/mysql/cache_connector'
26
+ DohDb::set_connector_instance(DohDb::CacheConnector.new(dbcfg))
27
+ end
28
+ end
29
+
30
+ class DohTest::TestGroup
31
+ include InternalTestHelpers
32
+ end
@@ -1,15 +1,24 @@
1
- require_relative 'db_unit_test'
1
+ require_relative 'helpers'
2
2
  require 'doh/mysql/metadata_util'
3
3
 
4
4
  module DohDb
5
5
 
6
6
  class Test_metadata_util < DohTest::TestGroup
7
- def tbl
8
- "doh_mysql_metadata_util_test"
7
+ def before_all
8
+ # TODO: shouldn't really have to do this, but for now metadata_util is dependent on it
9
+ init_global_connector
10
+ end
11
+
12
+ def before_each
13
+ drop_tbl
14
+ end
15
+
16
+ def after_each
17
+ drop_tbl
9
18
  end
10
19
 
11
20
  def test_stuff
12
- dbh = DohDb::request_handle
21
+ dbh = get_dbh
13
22
  dbh.query("CREATE TABLE #{tbl} (num INT, str CHAR(7))")
14
23
  column_info = DohDb::column_info(tbl)
15
24
  info = column_info['str']
@@ -40,14 +49,6 @@ class Test_metadata_util < DohTest::TestGroup
40
49
  assert_raises(RuntimeError) { DohDb::find_primary_key(tbl, "this_database_doesnt_exist") }
41
50
  assert_raises(RuntimeError) { DohDb::find_primary_key("this table doesn't exist") }
42
51
  end
43
-
44
- def before_each
45
- DohDb::query("DROP TABLE IF EXISTS #{tbl}")
46
- end
47
-
48
- def after_each
49
- DohDb::query("DROP TABLE IF EXISTS #{tbl}")
50
- end
51
52
  end
52
53
 
53
54
  end
@@ -0,0 +1,24 @@
1
+ require_relative 'helpers'
2
+ require 'mysql2'
3
+
4
+ module DohDb
5
+
6
+ class Test_typecasting < DohTest::TestGroup
7
+ def test_stuff
8
+ Mysql2::Client.default_query_options[:database_timezone] = :utc
9
+ Mysql2::Client.default_query_options[:application_timezone] = :utc
10
+
11
+ dbh = get_dbh
12
+ dbh.query("CREATE TEMPORARY TABLE #{tbl} (char_field CHAR(1) NOT NULL, int_field INT, bool_field TINYINT(1), date_field DATE, datetime_field DATETIME, decimal_field DECIMAL(7,2))")
13
+ dbh.insert("INSERT INTO #{tbl} SET char_field = 'c', int_field = 5, bool_field = 1, date_field = '2012-02-20', datetime_field = '2012-02-20 21:06:00', decimal_field = 54.12")
14
+ row = dbh.select_row("SELECT * FROM #{tbl}")
15
+ assert_equal('c', row['char_field'])
16
+ assert_equal(5, row['int_field'])
17
+ assert_equal(true, row['bool_field'])
18
+ assert_equal(Date.new(2012,2,20), row['date_field'])
19
+ assert_equal(DateTime.new(2012,2,20, 21, 6, 0), row['datetime_field'])
20
+ assert_equal(BigDecimal('54.12'), row['decimal_field'])
21
+ end
22
+ end
23
+
24
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dohmysql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,22 +10,33 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-02-27 00:00:00.000000000Z
13
+ date: 2012-03-14 00:00:00.000000000Z
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: dohroot
17
+ requirement: &70154500522900 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 0.1.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *70154500522900
15
26
  - !ruby/object:Gem::Dependency
16
27
  name: dohutil
17
- requirement: &70362932067240 !ruby/object:Gem::Requirement
28
+ requirement: &70154500522240 !ruby/object:Gem::Requirement
18
29
  none: false
19
30
  requirements:
20
31
  - - ! '>='
21
32
  - !ruby/object:Gem::Version
22
- version: 0.1.5
33
+ version: 0.1.7
23
34
  type: :runtime
24
35
  prerelease: false
25
- version_requirements: *70362932067240
36
+ version_requirements: *70154500522240
26
37
  - !ruby/object:Gem::Dependency
27
38
  name: mysql2
28
- requirement: &70362932066660 !ruby/object:Gem::Requirement
39
+ requirement: &70154500521540 !ruby/object:Gem::Requirement
29
40
  none: false
30
41
  requirements:
31
42
  - - ! '>='
@@ -33,29 +44,29 @@ dependencies:
33
44
  version: 0.3.11
34
45
  type: :runtime
35
46
  prerelease: false
36
- version_requirements: *70362932066660
47
+ version_requirements: *70154500521540
37
48
  - !ruby/object:Gem::Dependency
38
49
  name: sqlstmt
39
- requirement: &70362932065940 !ruby/object:Gem::Requirement
50
+ requirement: &70154500520920 !ruby/object:Gem::Requirement
40
51
  none: false
41
52
  requirements:
42
53
  - - ! '>='
43
54
  - !ruby/object:Gem::Version
44
- version: 0.1.0
55
+ version: 0.1.1
45
56
  type: :runtime
46
57
  prerelease: false
47
- version_requirements: *70362932065940
58
+ version_requirements: *70154500520920
48
59
  - !ruby/object:Gem::Dependency
49
60
  name: dohtest
50
- requirement: &70362932065220 !ruby/object:Gem::Requirement
61
+ requirement: &70154500520300 !ruby/object:Gem::Requirement
51
62
  none: false
52
63
  requirements:
53
64
  - - ! '>='
54
65
  - !ruby/object:Gem::Version
55
- version: 0.1.4
66
+ version: 0.1.7
56
67
  type: :development
57
68
  prerelease: false
58
- version_requirements: *70362932065220
69
+ version_requirements: *70154500520300
59
70
  description: wrapper classes around low level mysql gem to provide a better interface
60
71
  email:
61
72
  - devinfo@atpsoft.com
@@ -67,11 +78,9 @@ extra_rdoc_files:
67
78
  files:
68
79
  - bin/makedb
69
80
  - lib/doh/mysql/abstract_row.rb
70
- - lib/doh/mysql/activate.rb
71
81
  - lib/doh/mysql/cache_connector.rb
72
82
  - lib/doh/mysql/connector_instance.rb
73
83
  - lib/doh/mysql/connector_util.rb
74
- - lib/doh/mysql/convert.rb
75
84
  - lib/doh/mysql/current_date.rb
76
85
  - lib/doh/mysql/database_creator.rb
77
86
  - lib/doh/mysql/db_date.rb
@@ -83,29 +92,24 @@ files:
83
92
  - lib/doh/mysql/parse.rb
84
93
  - lib/doh/mysql/raw_row_builder.rb
85
94
  - lib/doh/mysql/readonly_row.rb
86
- - lib/doh/mysql/require_dbtypes.rb
87
95
  - lib/doh/mysql/smart_row.rb
88
96
  - lib/doh/mysql/to_sql.rb
89
97
  - lib/doh/mysql/typed_row_builder.rb
90
98
  - lib/doh/mysql/types.rb
91
99
  - lib/doh/mysql/unquoted.rb
92
- - lib/doh/mysql/version.rb
93
100
  - lib/doh/mysql/virtual.rb
94
101
  - lib/doh/mysql/writable_row.rb
95
102
  - lib/doh/mysql.rb
96
103
  - test/cache_connector.dt.rb
97
- - test/connector.yml
98
- - test/connector.yml.tmpl
99
104
  - test/connector_instance.dt.rb
100
- - test/convert.dt.rb
101
- - test/db_unit_test.rb
102
105
  - test/handle.dt.rb
106
+ - test/helpers.rb
103
107
  - test/metadata_util.dt.rb
104
108
  - test/parse.dt.rb
105
109
  - test/readonly_row.dt.rb
106
110
  - test/smart_row.dt.rb
107
111
  - test/to_sql.dt.rb
108
- - test/types.dt.rb
112
+ - test/typecasting.dt.rb
109
113
  - test/unquoted.dt.rb
110
114
  - test/writable_row.dt.rb
111
115
  - MIT-LICENSE
@@ -137,15 +141,14 @@ summary: friendly mysql client interface
137
141
  test_files:
138
142
  - test/cache_connector.dt.rb
139
143
  - test/connector_instance.dt.rb
140
- - test/convert.dt.rb
141
- - test/db_unit_test.rb
142
144
  - test/handle.dt.rb
145
+ - test/helpers.rb
143
146
  - test/metadata_util.dt.rb
144
147
  - test/parse.dt.rb
145
148
  - test/readonly_row.dt.rb
146
149
  - test/smart_row.dt.rb
147
150
  - test/to_sql.dt.rb
148
- - test/types.dt.rb
151
+ - test/typecasting.dt.rb
149
152
  - test/unquoted.dt.rb
150
153
  - test/writable_row.dt.rb
151
154
  has_rdoc:
@@ -1,26 +0,0 @@
1
- require 'doh/mysql/cache_connector'
2
- require 'doh/mysql/connector_instance'
3
- require 'doh/mysql/handle'
4
- require 'doh/mysql/to_sql'
5
- require 'doh/mysql/db_date'
6
- require 'doh/mysql/unquoted'
7
- require 'doh/config'
8
-
9
- module DohDb
10
-
11
- def self.activate
12
- root_cfg = Doh::config
13
- return unless root_cfg.fetch('enable_database', true)
14
- return unless root_cfg.key?('database')
15
- db_cfg = root_cfg['database']
16
- require 'doh/mysql'
17
- require 'doh/mysql/require_dbtypes'
18
- conn = DohDb::CacheConnector.new(db_cfg['host'], db_cfg['username'], db_cfg['password'], db_cfg['database'] || root_cfg['primary_database'])
19
- conn.port = db_cfg['port']
20
- conn.timeout = db_cfg['timeout'].to_i if db_cfg['timeout']
21
- conn.row_builder = db_cfg['row_builder'] || root_cfg['row_builder']
22
- DohDb::set_connector_instance(conn)
23
- DohDb::require_dbtypes
24
- end
25
-
26
- end
@@ -1,18 +0,0 @@
1
- require 'doh/mysql/metadata_util'
2
- require 'doh/mysql/error'
3
-
4
- module DohDb
5
-
6
- def self.convert(table, column, value)
7
- info = column_info(table)[column]
8
- # raise UnknownColumn, "#{table}.#{column}" if info.nil?
9
- return value if info.nil?
10
- if value.nil?
11
- raise CannotBeNull, "#{table}.#{column}" if info['is_nullable'] == 'NO'
12
- return nil
13
- end
14
- return nil if value.is_a?(String) && value.empty? && info['is_nullable'] == 'YES'
15
- value
16
- end
17
-
18
- end
@@ -1,8 +0,0 @@
1
- module DohDb
2
-
3
- def self.require_dbtypes
4
- lib_dbtypes_file = File.join(Doh::root, 'lib/dbtypes.rb')
5
- require(lib_dbtypes_file) if File.exist?(lib_dbtypes_file)
6
- end
7
-
8
- end
@@ -1,102 +0,0 @@
1
- require 'doh/mysql/connector_instance'
2
- require 'yaml'
3
-
4
- module DohDb
5
-
6
- def self.locked_filename(database)
7
- File.join(Doh::root, 'database', database, 'migrate/locked.yml')
8
- end
9
-
10
- def self.migration_filename(database, version, upordown = 'up')
11
- version_str = version.to_s.rjust(3, '0')
12
- File.join(Doh::root, 'database', database, "migrate/#{version_str}_#{upordown}.sql")
13
- end
14
-
15
- def self.current_database_version(database = nil)
16
- if database.nil?
17
- table = 'version'
18
- else
19
- table = database + '.version'
20
- end
21
- DohDb::select_field("SELECT version FROM #{table}").to_i
22
- end
23
-
24
- def self.latest_database_version(database = nil)
25
- locked_version = locked_database_version(database)
26
- unlocked_version = locked_version + 1
27
- unlocked_migration_file = migration_filename(database, unlocked_version)
28
- if File.exist?(unlocked_migration_file)
29
- unlocked_version
30
- else
31
- locked_version
32
- end
33
- end
34
-
35
- def self.locked_version_info(database = nil)
36
- database ||= (DohDb::connector_instance && DohDb::connector_instance.database) || Doh::config['primary_database']
37
- filename = locked_filename(database)
38
- return [0, nil] unless File.exist?(filename)
39
- YAML.load_file(filename)
40
- end
41
-
42
- def self.locked_database_version(database = nil)
43
- locked_version_info(database).first
44
- end
45
-
46
- def self.locked_svn_revision(database = nil)
47
- locked_version_info(database).last
48
- end
49
-
50
- def self.update_locked_file(database)
51
- locked_file = locked_filename(database)
52
- if File.exist?(locked_file)
53
- new_version = YAML.load_file(locked_file).first + 1
54
- else
55
- new_version = 0
56
- need_to_add = true
57
- end
58
-
59
- file_to_check = ''
60
- if need_to_add
61
- file_to_check = File.join(Doh::root, "database")
62
- else
63
- unlocked_migration_file = migration_filename(database, new_version)
64
- return [true, "nothing to lock"] unless File.exist?(unlocked_migration_file)
65
-
66
- svnout = `svn st #{unlocked_migration_file}`
67
- unless svnout.strip.empty?
68
- return [false, "svn status shows local changes to #{unlocked_migration_file} -- this needs to be resolved before updating the migration locked file"]
69
- end
70
-
71
- file_to_check = unlocked_migration_file
72
- end
73
-
74
- `svn update #{file_to_check}`
75
- svnout = `svn st -v #{file_to_check}`.split("\n")
76
- svnout =~ /(\d+)/
77
- revision = svnout.collect {|elem| elem =~ /(\d+)/; $1.to_i}.max
78
- if !revision
79
- return [false, "unable to extract svn revision from: '#{svnout}'"]
80
- end
81
-
82
- outfile = File.new(locked_file, 'w')
83
- outfile.puts([new_version, revision.to_i].inspect)
84
- outfile.close
85
-
86
- if need_to_add
87
- svnout = `svn add #{locked_file}`
88
- if svnout[0,1] != 'A'
89
- return [false, "failed to svn add #{locked_file}"]
90
- end
91
- end
92
-
93
- msg = "migrate lock for #{database} database, version #{new_version}"
94
- svnout = `svn ci -m \"#{msg}\" #{locked_file}`
95
- unless svnout.index("Committed revision")
96
- return [false, "failed to svn ci #{locked_file}"]
97
- end
98
-
99
- [true, "#{locked_file} successfully updated"]
100
- end
101
-
102
- end
data/test/connector.yml DELETED
@@ -1,4 +0,0 @@
1
- host: localhost
2
- database: test
3
- username: root
4
- password:
@@ -1,4 +0,0 @@
1
- host: localhost
2
- database: test
3
- username: doh_mysql
4
- password:
data/test/convert.dt.rb DELETED
@@ -1,45 +0,0 @@
1
- require_relative 'db_unit_test'
2
- require 'doh/mysql/convert'
3
-
4
- module DohDb
5
-
6
- class Test_Convert < DohTest::TestGroup
7
- def before_each
8
- @tbl = "doh_mysql_convert_tests"
9
- DohDb::query("DROP TABLE IF EXISTS #@tbl")
10
- DohDb::request_handle.query("CREATE TABLE #{@tbl} (not_null_field CHAR(1) NOT NULL, null_ok_field CHAR(1), int_field INT, bool_field TINYINT(1), date_field DATE, datetime_field DATETIME)")
11
- end
12
-
13
- def after_each
14
- DohDb::query("DROP TABLE IF EXISTS #@tbl")
15
- end
16
-
17
- def convert(value)
18
- DohDb::convert(@tbl, @field, value)
19
- end
20
-
21
- def verify(converted, original)
22
- assert_equal(converted, convert(original))
23
- end
24
-
25
- def verify_same(value)
26
- verify(value, value)
27
- end
28
-
29
- def verify_exception(value, exception_class)
30
- assert_raises(exception_class) { convert(value) }
31
- end
32
-
33
- def test_nil_null
34
- # assert_raises(UnknownColumn) { DohDb::convert('some_table_that_doesnt_exist', 'some_column_that_doesnt_exist', 'blah') }
35
- assert_equal('blah', DohDb::convert('some_table_that_doesnt_exist', 'some_column_that_doesnt_exist', 'blah'))
36
- assert_equal('blah', DohDb::convert('', 'some_column_that_doesnt_exist', 'blah'))
37
- assert_raises(CannotBeNull) { DohDb::convert(@tbl, 'not_null_field', nil) }
38
- assert_equal(nil, DohDb::convert(@tbl, 'null_ok_field', nil))
39
- assert_equal('', DohDb::convert(@tbl, 'not_null_field', ''))
40
- assert_equal(nil, DohDb::convert(@tbl, 'null_ok_field', ''))
41
- assert_equal(nil, DohDb::convert(@tbl, 'int_field', ''))
42
- end
43
- end
44
-
45
- end
data/test/db_unit_test.rb DELETED
@@ -1,10 +0,0 @@
1
- require 'doh/mysql/connector_instance'
2
- require 'doh/mysql/cache_connector'
3
- require 'yaml'
4
-
5
- config_filename = File.join(File.dirname(__FILE__), 'connector.yml')
6
- raise RuntimeError.new("mysql connector configuration file (#{config_filename}) must exist (see #{config_filename}.tmpl for an example)") unless File.exist?(config_filename)
7
- config = YAML.load_file(config_filename)
8
-
9
- connector = DohDb::CacheConnector.new(config['host'], config['username'], config['password'], config['database'])
10
- DohDb::set_connector_instance(connector)
data/test/types.dt.rb DELETED
@@ -1,28 +0,0 @@
1
- require_relative 'db_unit_test'
2
- require 'doh/mysql/types'
3
-
4
- module DohDb
5
-
6
- class Test_types < DohTest::TestGroup
7
- def test_stuff
8
- Mysql2::Client.default_query_options[:database_timezone] = :utc
9
- Mysql2::Client.default_query_options[:application_timezone] = :utc
10
- DohDb::connector_instance.reset
11
-
12
- @tbl = "doh_mysql_type_conversion_tests"
13
- DohDb::query("DROP TABLE IF EXISTS #@tbl")
14
- DohDb::request_handle.query("CREATE TEMPORARY TABLE #{@tbl} (char_field CHAR(1) NOT NULL, int_field INT, bool_field TINYINT(1), date_field DATE, datetime_field DATETIME, decimal_field DECIMAL(7,2))")
15
-
16
- dbh = DohDb::request_handle
17
- dbh.insert("INSERT INTO #{@tbl} SET char_field = 'c', int_field = 5, bool_field = 1, date_field = '2012-02-20', datetime_field = '2012-02-20 21:06:00', decimal_field = 54.12")
18
- row = dbh.select_row("SELECT * FROM #{@tbl}")
19
- assert_equal('c', row['char_field'])
20
- assert_equal(5, row['int_field'])
21
- assert_equal(true, row['bool_field'])
22
- assert_equal(Date.new(2012,2,20), row['date_field'])
23
- assert_equal(DateTime.new(2012,2,20, 21, 6, 0).utc, row['datetime_field'])
24
- assert_equal(BigDecimal('54.12'), row['decimal_field'])
25
- end
26
- end
27
-
28
- end