fluiddb 0.0.32 → 0.1.0
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/Db.rb +3 -0
- data/lib/FluidDb/Firebird.rb +141 -0
- data/lib/FluidDb/TinyTds.rb +1 -1
- metadata +3 -2
data/lib/FluidDb/Db.rb
CHANGED
@@ -0,0 +1,141 @@
|
|
1
|
+
require "FluidDb"
|
2
|
+
require "fb"
|
3
|
+
include Fb
|
4
|
+
|
5
|
+
module FluidDb
|
6
|
+
|
7
|
+
class Firebird<Base
|
8
|
+
|
9
|
+
# Connect to Db.
|
10
|
+
#
|
11
|
+
# @param [String] uri a location for the resource to which we will attach, eg mysql://user:pass@127.0.0.1/foo
|
12
|
+
def connect()
|
13
|
+
uri = @uri
|
14
|
+
|
15
|
+
user = uri.user || "sysdba"
|
16
|
+
password = uri.password || "masterkey"
|
17
|
+
|
18
|
+
|
19
|
+
# The Database class acts as a factory for Connections.
|
20
|
+
# It can also create and drop databases.
|
21
|
+
db = Database.new(
|
22
|
+
:database => "#{uri.host}:#{uri.path}",
|
23
|
+
:username => user,
|
24
|
+
:password => password)
|
25
|
+
# :database is the only parameter without a default.
|
26
|
+
# Let's connect to the database, creating it if it doesn't already exist.
|
27
|
+
@connection = db.connect rescue db.create.connect
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
def close
|
32
|
+
@connection.close
|
33
|
+
end
|
34
|
+
|
35
|
+
def queryForArray( sql, params )
|
36
|
+
sql = self.format_to_sql( sql, params )
|
37
|
+
list = @connection.query(:hash, sql)
|
38
|
+
|
39
|
+
# if ( $result === false ) then
|
40
|
+
# $message = pg_last_error( $this->connection );
|
41
|
+
# throw new Fluid_ConnectionException( $message );
|
42
|
+
#end
|
43
|
+
|
44
|
+
case list.length
|
45
|
+
when -1
|
46
|
+
raise FluidDb::ConnectionError.new
|
47
|
+
when 0
|
48
|
+
raise FluidDb::NoDataFoundError.new
|
49
|
+
when 1
|
50
|
+
return list[0]
|
51
|
+
else
|
52
|
+
raise FluidDb::TooManyRowsError.new
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def queryForValue( sql, params )
|
57
|
+
sql = self.format_to_sql( sql, params )
|
58
|
+
results = @connection.query(sql)
|
59
|
+
|
60
|
+
# if ( $result === false ) then
|
61
|
+
# $message = pg_last_error( $this->connection );
|
62
|
+
# throw new Fluid_ConnectionException( $message );
|
63
|
+
#end
|
64
|
+
case results.length
|
65
|
+
when -1
|
66
|
+
raise FluidDb::ConnectionError.new
|
67
|
+
when 0
|
68
|
+
raise FluidDb::NoDataFoundError.new
|
69
|
+
when 1
|
70
|
+
return results[0][0]
|
71
|
+
# return results.getvalue(0,0)
|
72
|
+
else
|
73
|
+
raise FluidDb::TooManyRowsError.new
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
def queryForResultset( sql, params )
|
80
|
+
sql = self.format_to_sql( sql, params )
|
81
|
+
list = @connection.query(:hash, sql)
|
82
|
+
|
83
|
+
# if ( $result === false ) then
|
84
|
+
# $message = pg_last_error( $this->connection );
|
85
|
+
# throw new Fluid_ConnectionException( $message );
|
86
|
+
#end
|
87
|
+
|
88
|
+
case list.length
|
89
|
+
when -1
|
90
|
+
raise FluidDb::ConnectionError.new
|
91
|
+
else
|
92
|
+
|
93
|
+
return list
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
def execute( sql, params, expected_affected_rows=nil )
|
99
|
+
sql = self.format_to_sql( sql, params )
|
100
|
+
|
101
|
+
self.verboseLog( "#{self.class.name}.execute. #{sql}" )
|
102
|
+
affected_rows = @connection.execute(sql)
|
103
|
+
|
104
|
+
if !expected_affected_rows.nil? and
|
105
|
+
affected_rows != expected_affected_rows then
|
106
|
+
raise ExpectedAffectedRowsError.new( "Expected affected rows, #{expected_affected_rows}, Actual affected rows, #{affected_rows}")
|
107
|
+
end
|
108
|
+
rescue PG::Error => e
|
109
|
+
raise DuplicateKeyError.new( e.message ) unless e.message.index( "duplicate key value violates unique constraint" ).nil?
|
110
|
+
|
111
|
+
raise e
|
112
|
+
end
|
113
|
+
|
114
|
+
def exec_params( sql, params, expected_affected_rows=nil )
|
115
|
+
parts = sql.split( "?" )
|
116
|
+
sql = ""
|
117
|
+
parts.each_with_index do |p,idx|
|
118
|
+
sql = sql + p;
|
119
|
+
sql = sql + "$#{idx+1}" if idx < parts.length - 1
|
120
|
+
end
|
121
|
+
affected_rows = @connection.exec_params( sql, params );
|
122
|
+
|
123
|
+
if !expected_affected_rows.nil? and
|
124
|
+
affected_rows != expected_affected_rows then
|
125
|
+
raise ExpectedAffectedRowsError.new( "Expected affected rows, #{expected_affected_rows}, Actual affected rows, #{affected_rows}")
|
126
|
+
end
|
127
|
+
rescue PG::Error => e
|
128
|
+
raise DuplicateKeyError.new( e.message ) unless e.message.index( "duplicate key value violates unique constraint" ).nil?
|
129
|
+
|
130
|
+
raise e
|
131
|
+
end
|
132
|
+
|
133
|
+
def insert( sql, params )
|
134
|
+
raise "Pgsql uses SEQUENCES, so possibly easier to use 2 executes"
|
135
|
+
# self.execute( sql, params )
|
136
|
+
#return @connection.last_id
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
data/lib/FluidDb/TinyTds.rb
CHANGED
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.1.0
|
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: 2013-
|
12
|
+
date: 2013-08-18 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/Db.rb
|
21
|
+
- lib/FluidDb/Firebird.rb
|
21
22
|
- lib/FluidDb/Mock.rb
|
22
23
|
- lib/FluidDb/Mysql.rb
|
23
24
|
- lib/FluidDb/Mysql2.rb
|