dohmysql 0.1.3 → 0.1.4
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/lib/doh/mysql.rb +0 -1
- data/lib/doh/mysql/cache_connector.rb +2 -3
- data/lib/doh/mysql/current_date.rb +0 -9
- data/lib/doh/mysql/handle.rb +3 -0
- data/lib/doh/mysql/metadata_util.rb +0 -25
- data/lib/doh/mysql/smart_row.rb +2 -75
- data/test/metadata_util.dt.rb +0 -6
- metadata +12 -22
- data/lib/doh/mysql/parse.rb +0 -36
- data/lib/doh/mysql/types.rb +0 -12
- data/lib/doh/mysql/unquoted.rb +0 -17
- data/lib/doh/mysql/virtual.rb +0 -17
- data/test/parse.dt.rb +0 -39
- data/test/smart_row.dt.rb +0 -21
- data/test/unquoted.dt.rb +0 -16
data/lib/doh/mysql.rb
CHANGED
@@ -12,7 +12,7 @@ class CacheConnector
|
|
12
12
|
|
13
13
|
def request_handle(database = nil)
|
14
14
|
if @handle
|
15
|
-
close_handle(
|
15
|
+
close_handle('handle was unused for too long') if passed_timeout?
|
16
16
|
@handle = nil if @handle && @handle.closed?
|
17
17
|
end
|
18
18
|
@last_used = Time.now
|
@@ -20,7 +20,7 @@ class CacheConnector
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def reset
|
23
|
-
close_handle(
|
23
|
+
close_handle('reset was called')
|
24
24
|
end
|
25
25
|
|
26
26
|
private
|
@@ -34,7 +34,6 @@ private
|
|
34
34
|
def get_new_handle(database = nil)
|
35
35
|
local_config = @config.dup
|
36
36
|
local_config[:database] = database if database
|
37
|
-
dohlog.info("connecting with config: #{local_config}")
|
38
37
|
local_config.delete(:timeout)
|
39
38
|
Handle.new(local_config)
|
40
39
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
require 'doh/current_date'
|
2
2
|
require 'doh/mysql/db_date'
|
3
|
-
require 'doh/mysql/parse'
|
4
|
-
require 'doh/mysql/to_sql'
|
5
3
|
|
6
4
|
module DohDb
|
7
5
|
|
@@ -13,11 +11,4 @@ def self.current_datetime_db
|
|
13
11
|
Doh::current_datetime(DohDb::now)
|
14
12
|
end
|
15
13
|
|
16
|
-
def self.server_datetime
|
17
|
-
retval = DohDb::select_field("SELECT #{DohDb::current_datetime_db.to_sql}")
|
18
|
-
# if there is a fake datetime right now, will need to parse it
|
19
|
-
retval = DohDb::parse_datetime(retval) if retval.is_a?(String)
|
20
|
-
retval
|
21
|
-
end
|
22
|
-
|
23
14
|
end
|
data/lib/doh/mysql/handle.rb
CHANGED
@@ -16,6 +16,9 @@ class Handle
|
|
16
16
|
|
17
17
|
def initialize(config)
|
18
18
|
@config = config
|
19
|
+
log_config = @config.dup
|
20
|
+
log_config.delete(:password)
|
21
|
+
dohlog.info("creating connection with config: #{log_config}")
|
19
22
|
@mysqlh = Mysql2::Client.new(@config)
|
20
23
|
dohlog.info("new connection created: id #{@mysqlh.thread_id}")
|
21
24
|
end
|
@@ -33,31 +33,6 @@ def self.field_exist?(table, field, database = nil)
|
|
33
33
|
column_info(table, database).key?(field)
|
34
34
|
end
|
35
35
|
|
36
|
-
@@primary_keys = {}
|
37
|
-
def self.find_primary_key(table, database = nil)
|
38
|
-
if table.index('.')
|
39
|
-
database = table.before('.')
|
40
|
-
table = table.after('.')
|
41
|
-
else
|
42
|
-
database ||= DohDb::connector_instance.config[:database]
|
43
|
-
end
|
44
|
-
|
45
|
-
dbhash = @@primary_keys[database]
|
46
|
-
if dbhash.nil?
|
47
|
-
dbhash = DohDb::select_transpose("SELECT table_name, column_name FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='#{database}' AND ORDINAL_POSITION=1")
|
48
|
-
raise "no information found for database #{database}" if dbhash.empty?
|
49
|
-
@@primary_keys[database] = dbhash
|
50
|
-
end
|
51
|
-
|
52
|
-
retval = dbhash[table]
|
53
|
-
raise "attempting to find_primary_key for table that doesn't exist: #{database}.#{table}" if retval.nil?
|
54
|
-
retval
|
55
|
-
end
|
56
|
-
|
57
|
-
def self.table_exist?(table, database = nil)
|
58
|
-
!find_primary_key(table, database).nil?
|
59
|
-
end
|
60
|
-
|
61
36
|
def self.field_list(table, database = nil)
|
62
37
|
column_info(table, database).keys
|
63
38
|
end
|
data/lib/doh/mysql/smart_row.rb
CHANGED
@@ -1,20 +1,7 @@
|
|
1
|
-
require 'doh/mysql/
|
2
|
-
require 'doh/to_display'
|
3
|
-
require 'doh/mysql/virtual'
|
4
|
-
require 'sqlstmt/update'
|
1
|
+
require 'doh/mysql/abstract_row'
|
5
2
|
|
6
3
|
module DohDb
|
7
4
|
|
8
|
-
class RowDisplayProxy
|
9
|
-
def initialize(row)
|
10
|
-
@row = row
|
11
|
-
end
|
12
|
-
|
13
|
-
def method_missing(sym, *ignore_args)
|
14
|
-
@row.send(sym.to_s).to_display
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
5
|
class AbstractSmartRow < AbstractRow
|
19
6
|
attr_accessor :table
|
20
7
|
attr_reader :changed_keys
|
@@ -23,23 +10,12 @@ class AbstractSmartRow < AbstractRow
|
|
23
10
|
@keys = keys.dup
|
24
11
|
@values = values.dup
|
25
12
|
@changed_keys = Set.new
|
26
|
-
@cached_virtuals = {}
|
27
13
|
end
|
28
14
|
|
29
15
|
def initialize_copy(orig)
|
30
16
|
@keys = @keys.dup
|
31
17
|
@values = @values.dup
|
32
18
|
@changed_keys = @changed_keys.dup
|
33
|
-
@cached_virtuals = @cached_virtuals.dup
|
34
|
-
@display_proxy = nil
|
35
|
-
end
|
36
|
-
|
37
|
-
def display(key = nil)
|
38
|
-
if key.nil?
|
39
|
-
@display_proxy ||= RowDisplayProxy.new(self)
|
40
|
-
else
|
41
|
-
get(key).to_display
|
42
|
-
end
|
43
19
|
end
|
44
20
|
|
45
21
|
def set(key, value, flag_changed = true)
|
@@ -82,56 +58,14 @@ class AbstractSmartRow < AbstractRow
|
|
82
58
|
@values.delete_at(index)
|
83
59
|
end
|
84
60
|
|
85
|
-
def db_insert
|
86
|
-
newid = DohDb::insert_hash(self, @table)
|
87
|
-
if newid != 0
|
88
|
-
set(primary_key, newid, false)
|
89
|
-
end
|
90
|
-
newid
|
91
|
-
end
|
92
|
-
|
93
|
-
def db_update
|
94
|
-
return if @changed_keys.empty?
|
95
|
-
before_db_update
|
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)}
|
99
|
-
DohDb::query(builder)
|
100
|
-
after_db_update
|
101
|
-
@changed_keys.clear
|
102
|
-
end
|
103
|
-
|
104
|
-
protected
|
105
|
-
def primary_key
|
106
|
-
DohDb::find_primary_key(@table)
|
107
|
-
end
|
108
|
-
|
109
|
-
def before_db_update
|
110
|
-
end
|
111
|
-
|
112
|
-
def after_db_update
|
113
|
-
end
|
114
|
-
|
115
61
|
def guess_missing_get(key)
|
116
62
|
return get(key) if key?(key)
|
117
|
-
|
118
|
-
raise "unknown field: #{key}" unless retval
|
119
|
-
retval
|
63
|
+
raise "unknown field: #{key}"
|
120
64
|
end
|
121
65
|
|
122
66
|
def guess_missing_set(key, value)
|
123
67
|
set(key, value)
|
124
68
|
end
|
125
|
-
|
126
|
-
def get_virtual_field(name)
|
127
|
-
cached = @cached_virtuals[name]
|
128
|
-
return cached if cached
|
129
|
-
if idvalue = get(name + '_id')
|
130
|
-
@cached_virtuals[name] = DohDb::LinkedRow.build(name, idvalue.to_i)
|
131
|
-
else
|
132
|
-
nil
|
133
|
-
end
|
134
|
-
end
|
135
69
|
end
|
136
70
|
|
137
71
|
class SmartRow < AbstractSmartRow
|
@@ -144,11 +78,4 @@ class SmartRow < AbstractSmartRow
|
|
144
78
|
end
|
145
79
|
end
|
146
80
|
|
147
|
-
class CustomSmartRow < AbstractSmartRow
|
148
|
-
def initialize(*args)
|
149
|
-
super(*parse_initialize_args(*args))
|
150
|
-
@table = self.class.default_table
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
81
|
end
|
data/test/metadata_util.dt.rb
CHANGED
@@ -42,12 +42,6 @@ class Test_metadata_util < DohTest::TestGroup
|
|
42
42
|
assert_equal('blahbla', newrow['str'])
|
43
43
|
assert_equal('blahblahblah', row['num'])
|
44
44
|
assert_equal('blahblahblah', row['str'])
|
45
|
-
|
46
|
-
assert(DohDb::table_exist?(tbl))
|
47
|
-
|
48
|
-
assert_equal('num', DohDb::find_primary_key(tbl))
|
49
|
-
assert_raises(RuntimeError) { DohDb::find_primary_key(tbl, "this_database_doesnt_exist") }
|
50
|
-
assert_raises(RuntimeError) { DohDb::find_primary_key("this table doesn't exist") }
|
51
45
|
end
|
52
46
|
end
|
53
47
|
|
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.
|
4
|
+
version: 0.1.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-03-
|
13
|
+
date: 2012-03-30 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: dohroot
|
17
|
-
requirement: &
|
17
|
+
requirement: &70181797597040 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 0.1.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70181797597040
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: dohutil
|
28
|
-
requirement: &
|
28
|
+
requirement: &70181797596320 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 0.1.7
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70181797596320
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: mysql2
|
39
|
-
requirement: &
|
39
|
+
requirement: &70181797595620 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 0.3.11
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70181797595620
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: sqlstmt
|
50
|
-
requirement: &
|
50
|
+
requirement: &70181797594820 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: 0.1.1
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70181797594820
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: dohtest
|
61
|
-
requirement: &
|
61
|
+
requirement: &70181797594000 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: 0.1.7
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70181797594000
|
70
70
|
description: wrapper classes around low level mysql gem to provide a better interface
|
71
71
|
email:
|
72
72
|
- devinfo@atpsoft.com
|
@@ -89,15 +89,11 @@ files:
|
|
89
89
|
- lib/doh/mysql/hash_row.rb
|
90
90
|
- lib/doh/mysql/load_sql.rb
|
91
91
|
- lib/doh/mysql/metadata_util.rb
|
92
|
-
- lib/doh/mysql/parse.rb
|
93
92
|
- lib/doh/mysql/raw_row_builder.rb
|
94
93
|
- lib/doh/mysql/readonly_row.rb
|
95
94
|
- lib/doh/mysql/smart_row.rb
|
96
95
|
- lib/doh/mysql/to_sql.rb
|
97
96
|
- lib/doh/mysql/typed_row_builder.rb
|
98
|
-
- lib/doh/mysql/types.rb
|
99
|
-
- lib/doh/mysql/unquoted.rb
|
100
|
-
- lib/doh/mysql/virtual.rb
|
101
97
|
- lib/doh/mysql/writable_row.rb
|
102
98
|
- lib/doh/mysql.rb
|
103
99
|
- test/cache_connector.dt.rb
|
@@ -105,12 +101,9 @@ files:
|
|
105
101
|
- test/handle.dt.rb
|
106
102
|
- test/helpers.rb
|
107
103
|
- test/metadata_util.dt.rb
|
108
|
-
- test/parse.dt.rb
|
109
104
|
- test/readonly_row.dt.rb
|
110
|
-
- test/smart_row.dt.rb
|
111
105
|
- test/to_sql.dt.rb
|
112
106
|
- test/typecasting.dt.rb
|
113
|
-
- test/unquoted.dt.rb
|
114
107
|
- test/writable_row.dt.rb
|
115
108
|
- MIT-LICENSE
|
116
109
|
homepage: https://github.com/atpsoft/dohmysql
|
@@ -144,11 +137,8 @@ test_files:
|
|
144
137
|
- test/handle.dt.rb
|
145
138
|
- test/helpers.rb
|
146
139
|
- test/metadata_util.dt.rb
|
147
|
-
- test/parse.dt.rb
|
148
140
|
- test/readonly_row.dt.rb
|
149
|
-
- test/smart_row.dt.rb
|
150
141
|
- test/to_sql.dt.rb
|
151
142
|
- test/typecasting.dt.rb
|
152
|
-
- test/unquoted.dt.rb
|
153
143
|
- test/writable_row.dt.rb
|
154
144
|
has_rdoc:
|
data/lib/doh/mysql/parse.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'bigdecimal'
|
2
|
-
require 'date'
|
3
|
-
|
4
|
-
module DohDb
|
5
|
-
|
6
|
-
def self.parse_bool(str)
|
7
|
-
if str == '0'
|
8
|
-
false
|
9
|
-
elsif str == '1'
|
10
|
-
true
|
11
|
-
else
|
12
|
-
raise ArgumentError.new("unexpected value: " + str)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.parse_datetime(str)
|
17
|
-
raise ArgumentError.new("unexpected value: " + str) unless str.size == 19
|
18
|
-
return nil if str == '0000-00-00 00:00:00'
|
19
|
-
DateTime.parse(str)
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.parse_date(str)
|
23
|
-
raise ArgumentError.new("unexpected value: " + str) unless str.size == 10
|
24
|
-
return nil if str == '0000-00-00'
|
25
|
-
Date.new(str[0..3].to_i, str[5..6].to_i, str[8..9].to_i)
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.parse_decimal(str)
|
29
|
-
BigDecimal(str)
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.parse_int(str)
|
33
|
-
str.to_i
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
data/lib/doh/mysql/types.rb
DELETED
data/lib/doh/mysql/unquoted.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
module DohDb
|
2
|
-
|
3
|
-
class Unquoted < String
|
4
|
-
def to_sql
|
5
|
-
to_s
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.unquoted(str)
|
10
|
-
Unquoted.new(str)
|
11
|
-
end
|
12
|
-
|
13
|
-
NOW = Unquoted.new('NOW()').freeze
|
14
|
-
TODAY = Unquoted.new('CURDATE()').freeze
|
15
|
-
NULL = Unquoted.new('NULL').freeze
|
16
|
-
|
17
|
-
end
|
data/lib/doh/mysql/virtual.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'doh/mysql/metadata_util'
|
2
|
-
require 'doh/mysql/readonly_row'
|
3
|
-
require 'doh/mysql/types'
|
4
|
-
|
5
|
-
module DohDb
|
6
|
-
|
7
|
-
class LinkedRow
|
8
|
-
def self.build(field, idvalue)
|
9
|
-
return ReadOnlyRow.new([], []) if idvalue.to_i == 0
|
10
|
-
table = field.sub(/_id/, '')
|
11
|
-
table = table.rafter('_') unless DohDb::table_exist?(table)
|
12
|
-
raise "unable to determine child table name for field #{field}" unless DohDb::table_exist?(table)
|
13
|
-
DohDb::select_row("SELECT * FROM #{table} WHERE #{DohDb::find_primary_key(table)} = #{idvalue}", DohDb::find_row_type(table) || :smart)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
data/test/parse.dt.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'doh/mysql/parse'
|
2
|
-
|
3
|
-
module DohDb
|
4
|
-
|
5
|
-
class Test_Parse < DohTest::TestGroup
|
6
|
-
def test_bool
|
7
|
-
assert_equal(false, DohDb::parse_bool('0'))
|
8
|
-
assert_equal(true, DohDb::parse_bool('1'))
|
9
|
-
assert_raises(ArgumentError) {DohDb::parse_bool('blah')}
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_date
|
13
|
-
assert_raises(ArgumentError) {DohDb::parse_date('blah')}
|
14
|
-
assert_equal(Date.new(2008,2,14), DohDb::parse_date('2008-02-14'))
|
15
|
-
assert_raises(ArgumentError) {DohDb::parse_date('20080214')}
|
16
|
-
assert_not_equal(Date.new(2008,2,14), DohDb::parse_date('2008-02-15'))
|
17
|
-
assert_equal(nil, DohDb::parse_date('0000-00-00'))
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_datetime
|
21
|
-
assert_raises(ArgumentError) {DohDb::parse_date('blah')}
|
22
|
-
assert_raises(ArgumentError) {DohDb::parse_datetime('zzzzzzzzzzzzzzzzzzz')}
|
23
|
-
assert_equal(DateTime.new(2008,2,14,10,20,30), DohDb::parse_datetime('2008-02-14 10:20:30'))
|
24
|
-
assert_not_equal(DateTime.new(2008,2,14,10,20,30), DohDb::parse_datetime('2008-02-14 10:20:31'))
|
25
|
-
assert_equal(nil, DohDb::parse_datetime('0000-00-00 00:00:00'))
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_decimal
|
29
|
-
assert_equal(BigDecimal.new('3.14'), DohDb::parse_decimal('3.14'))
|
30
|
-
assert_equal(BigDecimal.new('0.0'), DohDb::parse_decimal('sjdkflsdjl'))
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_int
|
34
|
-
assert_equal(3, DohDb::parse_int('3'))
|
35
|
-
assert_equal(0, DohDb::parse_int('sjdkflsdjl'))
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
data/test/smart_row.dt.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'doh/mysql/smart_row'
|
2
|
-
|
3
|
-
module DohDb
|
4
|
-
|
5
|
-
class Test_SmartRow < DohTest::TestGroup
|
6
|
-
def test_display
|
7
|
-
row = SmartRow.new(['flag'], [true])
|
8
|
-
assert_equal('', row.display('this_field_doesnt_exist'))
|
9
|
-
assert_raises(RuntimeError) { row.display.this_field_doesnt_exist }
|
10
|
-
assert_equal('yes', row.display('flag'))
|
11
|
-
assert_equal('yes', row.display.flag)
|
12
|
-
row2 = row.dup
|
13
|
-
assert_equal(true, row2.flag)
|
14
|
-
row2.flag = false
|
15
|
-
assert_equal(false, row2.flag)
|
16
|
-
assert_equal(true, row.flag)
|
17
|
-
assert_raises(RuntimeError) { row.this_field_doesnt_exist }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
data/test/unquoted.dt.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'doh/mysql/unquoted'
|
2
|
-
|
3
|
-
module DohDb
|
4
|
-
|
5
|
-
class Test_Unquoted < DohTest::TestGroup
|
6
|
-
def test_stuff
|
7
|
-
assert_equal('', Unquoted.new)
|
8
|
-
assert_equal('blah', Unquoted.new('blah'))
|
9
|
-
assert_equal('blah', Unquoted.new('blah').to_s)
|
10
|
-
assert_equal('blah', Unquoted.new('blah').to_sql)
|
11
|
-
assert_equal('SELECT * FROM blah WHERE smoe = NULL', "SELECT * FROM blah WHERE smoe = #{DohDb::NULL.to_sql}")
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
|