fluiddb 0.0.5 → 0.0.6
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/FluidDb.rb +11 -0
- data/lib/FluidDb/Mysql.rb +26 -23
- data/lib/FluidDb/Mysql2.rb +112 -0
- data/lib/FluidDb/Pgsql.rb +13 -17
- metadata +3 -2
data/lib/FluidDb.rb
CHANGED
@@ -11,6 +11,8 @@ module FluidDb
|
|
11
11
|
end
|
12
12
|
class ParamTypeNotSupportedError<StandardError
|
13
13
|
end
|
14
|
+
class ExpectedAffectedRowsError<StandardError
|
15
|
+
end
|
14
16
|
|
15
17
|
class Base
|
16
18
|
|
@@ -40,6 +42,15 @@ module FluidDb
|
|
40
42
|
|
41
43
|
return sql
|
42
44
|
end
|
45
|
+
|
46
|
+
def convertTupleToHash( fields, tuple, j )
|
47
|
+
hash = Hash.new
|
48
|
+
0.upto( fields.length-1 ).each do |i|
|
49
|
+
hash[fields[i].to_s] = tuple.getvalue(j, i)
|
50
|
+
end
|
51
|
+
|
52
|
+
return hash
|
53
|
+
end
|
43
54
|
|
44
55
|
def queryForArray( sql, params )
|
45
56
|
raise NotImplementedError.new("You must implement 'queryForArray'.")
|
data/lib/FluidDb/Mysql.rb
CHANGED
@@ -1,17 +1,14 @@
|
|
1
1
|
require "FluidDb"
|
2
|
-
require "
|
2
|
+
require "mysql"
|
3
3
|
|
4
4
|
module FluidDb
|
5
|
-
|
5
|
+
|
6
6
|
class Mysql<Base
|
7
7
|
|
8
8
|
def initialize(uri)
|
9
|
-
host = uri.host
|
10
9
|
database = uri.path.sub( "/", "" )
|
11
10
|
|
12
|
-
@connection =
|
13
|
-
:database => uri.path.sub( "/", "" ),
|
14
|
-
:username => uri.user )
|
11
|
+
@connection = ::Mysql.new uri.host, uri.user, uri.password, database, nil, nil, ::Mysql::CLIENT_FOUND_ROWS
|
15
12
|
end
|
16
13
|
|
17
14
|
def queryForArray( sql, params )
|
@@ -23,33 +20,30 @@ module FluidDb
|
|
23
20
|
# throw new Fluid_ConnectionException( $message );
|
24
21
|
#end
|
25
22
|
|
26
|
-
case results.
|
23
|
+
case results.num_rows
|
27
24
|
when -1
|
28
25
|
raise FluidDb::ConnectionError.new
|
29
26
|
when 0
|
30
27
|
raise FluidDb::NoDataFoundError.new
|
31
28
|
when 1
|
32
|
-
r=
|
33
|
-
results.each do |row|
|
34
|
-
r=row
|
35
|
-
end
|
29
|
+
r = results.fetch_hash
|
36
30
|
return r
|
37
31
|
else
|
38
32
|
raise FluidDb::TooManyRowsError.new
|
39
33
|
end
|
40
34
|
|
41
35
|
end
|
42
|
-
|
36
|
+
|
43
37
|
def queryForValue( sql, params )
|
44
38
|
sql = self.format_to_sql( sql, params )
|
45
|
-
results = @connection.query(sql
|
46
|
-
|
39
|
+
results = @connection.query(sql)
|
40
|
+
|
47
41
|
# if ( $result === false ) then
|
48
42
|
# $message = pg_last_error( $this->connection );
|
49
43
|
# throw new Fluid_ConnectionException( $message );
|
50
44
|
#end
|
51
45
|
|
52
|
-
case results.
|
46
|
+
case results.num_rows
|
53
47
|
when -1
|
54
48
|
raise FluidDb::ConnectionError.new
|
55
49
|
when 0
|
@@ -76,24 +70,33 @@ module FluidDb
|
|
76
70
|
# throw new Fluid_ConnectionException( $message );
|
77
71
|
#end
|
78
72
|
|
79
|
-
case results.
|
73
|
+
case results.num_rows
|
80
74
|
when -1
|
81
75
|
raise FluidDb::ConnectionError.new
|
82
76
|
else
|
83
|
-
|
77
|
+
list = Array.new
|
78
|
+
results.each_hash do |row|
|
79
|
+
list.push row
|
80
|
+
end
|
81
|
+
|
82
|
+
return list
|
84
83
|
end
|
85
84
|
end
|
86
|
-
|
87
|
-
|
88
|
-
# def execute( sql, params, expected_affected_rows )
|
89
|
-
def execute( sql, params )
|
85
|
+
|
86
|
+
def execute( sql, params, expected_affected_rows=nil )
|
90
87
|
sql = self.format_to_sql( sql, params )
|
88
|
+
# puts "sql: #{sql}"
|
91
89
|
@connection.query( sql );
|
90
|
+
|
91
|
+
if !expected_affected_rows.nil? and
|
92
|
+
@connection.affected_rows != expected_affected_rows then
|
93
|
+
raise ExpectedAffectedRowsError.new( "Expected affected rows, #{expected_affected_rows}, Actual affected rows, #{@connection.affected_rows}")
|
94
|
+
end
|
92
95
|
end
|
93
|
-
|
96
|
+
|
94
97
|
def insert( sql, params )
|
95
98
|
self.execute( sql, params )
|
96
|
-
return @connection.
|
99
|
+
return @connection.insert_id
|
97
100
|
end
|
98
101
|
|
99
102
|
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require "FluidDb"
|
2
|
+
require "mysql2"
|
3
|
+
|
4
|
+
module FluidDb
|
5
|
+
|
6
|
+
class Mysql2<Base
|
7
|
+
|
8
|
+
def initialize(uri)
|
9
|
+
host = uri.host
|
10
|
+
database = uri.path.sub( "/", "" )
|
11
|
+
|
12
|
+
|
13
|
+
@connection = ::Mysql2::Client.new(:host => uri.host,
|
14
|
+
:database => uri.path.sub( "/", "" ),
|
15
|
+
:username => uri.user,
|
16
|
+
:flags => ::Mysql2::Client::FOUND_ROWS )
|
17
|
+
end
|
18
|
+
|
19
|
+
def queryForArray( sql, params )
|
20
|
+
sql = self.format_to_sql( sql, params )
|
21
|
+
results = @connection.query(sql)
|
22
|
+
|
23
|
+
# if ( $result === false ) then
|
24
|
+
# $message = pg_last_error( $this->connection );
|
25
|
+
# throw new Fluid_ConnectionException( $message );
|
26
|
+
#end
|
27
|
+
|
28
|
+
case results.count
|
29
|
+
when -1
|
30
|
+
raise FluidDb::ConnectionError.new
|
31
|
+
when 0
|
32
|
+
raise FluidDb::NoDataFoundError.new
|
33
|
+
when 1
|
34
|
+
r=nil;
|
35
|
+
results.each do |row|
|
36
|
+
r=row
|
37
|
+
end
|
38
|
+
return r
|
39
|
+
else
|
40
|
+
raise FluidDb::TooManyRowsError.new
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
def queryForValue( sql, params )
|
46
|
+
sql = self.format_to_sql( sql, params )
|
47
|
+
results = @connection.query(sql, :as => :array)
|
48
|
+
|
49
|
+
# if ( $result === false ) then
|
50
|
+
# $message = pg_last_error( $this->connection );
|
51
|
+
# throw new Fluid_ConnectionException( $message );
|
52
|
+
#end
|
53
|
+
|
54
|
+
case results.count
|
55
|
+
when -1
|
56
|
+
raise FluidDb::ConnectionError.new
|
57
|
+
when 0
|
58
|
+
raise FluidDb::NoDataFoundError.new
|
59
|
+
when 1
|
60
|
+
r=nil;
|
61
|
+
results.each do |row|
|
62
|
+
r=row
|
63
|
+
end
|
64
|
+
return r[0]
|
65
|
+
else
|
66
|
+
raise FluidDb::TooManyRowsError.new
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
def queryForResultset( sql, params )
|
73
|
+
sql = self.format_to_sql( sql, params )
|
74
|
+
results = @connection.query(sql)
|
75
|
+
|
76
|
+
# if ( $result === false ) then
|
77
|
+
# $message = pg_last_error( $this->connection );
|
78
|
+
# throw new Fluid_ConnectionException( $message );
|
79
|
+
#end
|
80
|
+
|
81
|
+
case results.count
|
82
|
+
when -1
|
83
|
+
raise FluidDb::ConnectionError.new
|
84
|
+
else
|
85
|
+
list = Array.new
|
86
|
+
results.each do |row|
|
87
|
+
list.push row
|
88
|
+
end
|
89
|
+
|
90
|
+
return list
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def execute( sql, params, expected_affected_rows=nil )
|
95
|
+
sql = self.format_to_sql( sql, params )
|
96
|
+
@connection.query( sql );
|
97
|
+
|
98
|
+
if !expected_affected_rows.nil? and
|
99
|
+
@connection.affected_rows != expected_affected_rows then
|
100
|
+
raise ExpectedAffectedRowsError.new( "Expected affected rows, #{expected_affected_rows}, Actual affected rows, #{@connection.affected_rows}")
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
def insert( sql, params )
|
106
|
+
self.execute( sql, params )
|
107
|
+
return @connection.last_id
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
data/lib/FluidDb/Pgsql.rb
CHANGED
@@ -11,16 +11,7 @@ module FluidDb
|
|
11
11
|
|
12
12
|
@connection = PG.connect( dbname:uri.path.sub( "/", "" ) )
|
13
13
|
end
|
14
|
-
|
15
|
-
def convertTupleToHash( fields, tuple, j )
|
16
|
-
hash = Hash.new
|
17
|
-
0.upto( fields.length-1 ).each do |i|
|
18
|
-
hash[fields[i].to_s] = tuple.getvalue(j, i)
|
19
|
-
end
|
20
|
-
|
21
|
-
return hash
|
22
|
-
end
|
23
|
-
|
14
|
+
|
24
15
|
def queryForArray( sql, params )
|
25
16
|
sql = self.format_to_sql( sql, params )
|
26
17
|
results = @connection.exec(sql)
|
@@ -89,17 +80,22 @@ module FluidDb
|
|
89
80
|
end
|
90
81
|
|
91
82
|
|
92
|
-
|
93
|
-
def execute( sql, params )
|
83
|
+
def execute( sql, params, expected_affected_rows=nil )
|
94
84
|
sql = self.format_to_sql( sql, params )
|
95
|
-
@connection.query( sql );
|
85
|
+
r = @connection.query( sql );
|
86
|
+
|
87
|
+
if !expected_affected_rows.nil? and
|
88
|
+
r.cmd_tuples != expected_affected_rows then
|
89
|
+
raise ExpectedAffectedRowsError.new( "Expected affected rows, #{expected_affected_rows}, Actual affected rows, #{r.cmd_tuples}")
|
90
|
+
end
|
96
91
|
end
|
97
|
-
|
92
|
+
|
98
93
|
def insert( sql, params )
|
99
|
-
|
100
|
-
|
94
|
+
raise "Pgsql uses SEQUENCES, so possibly easier to use 2 executes"
|
95
|
+
# self.execute( sql, params )
|
96
|
+
#return @connection.last_id
|
101
97
|
end
|
102
|
-
|
98
|
+
|
103
99
|
end
|
104
100
|
|
105
101
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluiddb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-06 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A semantic layer for db interaction
|
15
15
|
email: guy@guyirvine.com
|
@@ -18,6 +18,7 @@ extensions: []
|
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
20
|
- lib/FluidDb/Mysql.rb
|
21
|
+
- lib/FluidDb/Mysql2.rb
|
21
22
|
- lib/FluidDb/Pgsql.rb
|
22
23
|
- lib/FluidDb.rb
|
23
24
|
- README.md
|