Class: FluidDb::Pgsql
- Inherits:
-
Base
- Object
- Base
- FluidDb::Pgsql
show all
- Defined in:
- lib/FluidDb/Pgsql.rb
Instance Attribute Summary
Attributes inherited from Base
#connection, #verbose
Instance Method Summary
collapse
Methods inherited from Base
#convertTupleToHash, #escape_string, #format_to_sql, #initialize, #reconnect, #splice_sql, #verboseLog
Constructor Details
This class inherits a constructor from FluidDb::Base
Instance Method Details
#Begin ⇒ Object
132
133
134
|
# File 'lib/FluidDb/Pgsql.rb', line 132
def Begin
@connection.exec( "BEGIN", [] )
end
|
#close ⇒ Object
24
25
26
|
# File 'lib/FluidDb/Pgsql.rb', line 24
def close
@connection.close
end
|
#Commit ⇒ Object
137
138
139
|
# File 'lib/FluidDb/Pgsql.rb', line 137
def Commit
@connection.exec( "COMMIT", [] )
end
|
#connect ⇒ Object
11
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/FluidDb/Pgsql.rb', line 11
def connect()
uri = @uri
host = uri.host
dbname = uri.path.sub( "/", "" )
hash = Hash["host", host, "dbname", dbname]
hash["port"] = uri.port unless uri.port.nil?
hash["user"] = uri.user unless uri.user.nil?
hash["password"] = uri.password unless uri.password.nil?
@connection = PG.connect( hash )
end
|
#exec_params(sql, params = [], expected_affected_rows = nil) ⇒ Object
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/FluidDb/Pgsql.rb', line 112
def exec_params( sql, params=[], expected_affected_rows=nil )
parts = sql.split( "?" )
sql = ""
parts.each_with_index do |p,idx|
sql = sql + p;
sql = sql + "$#{idx+1}" if idx < parts.length - 1
end
r = @connection.exec_params( sql, params );
if !expected_affected_rows.nil? and
r.cmd_tuples != expected_affected_rows then
raise ExpectedAffectedRowsError.new( "Expected affected rows, #{expected_affected_rows}, Actual affected rows, #{r.cmd_tuples}")
end
rescue PG::Error => e
raise DuplicateKeyError.new( e.message ) unless e.message.index( "duplicate key value violates unique constraint" ).nil?
raise e
end
|
#execute(sql, params = [], expected_affected_rows = nil) ⇒ Object
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/FluidDb/Pgsql.rb', line 96
def execute( sql, params=[], expected_affected_rows=nil )
sql = self.format_to_sql( sql, params )
self.verboseLog( "#{self.class.name}.execute. #{sql}" )
r = @connection.exec(sql)
if !expected_affected_rows.nil? and
r.cmd_tuples != expected_affected_rows then
raise ExpectedAffectedRowsError.new( "Expected affected rows, #{expected_affected_rows}, Actual affected rows, #{r.cmd_tuples}")
end
rescue PG::Error => e
raise DuplicateKeyError.new( e.message ) unless e.message.index( "duplicate key value violates unique constraint" ).nil?
raise e
end
|
#insert(sql, params) ⇒ Object
146
147
148
149
150
|
# File 'lib/FluidDb/Pgsql.rb', line 146
def insert( sql, params )
raise "Pgsql uses SEQUENCES, so possibly easier to use 2 executes"
end
|
#queryForArray(sql, params = []) ⇒ Object
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/FluidDb/Pgsql.rb', line 28
def queryForArray( sql, params=[] )
sql = self.format_to_sql( sql, params )
results = @connection.exec(sql)
case results.num_tuples
when -1
raise FluidDb::ConnectionError.new
when 0
raise FluidDb::NoDataFoundError.new
when 1
return self.convertTupleToHash(results.fields, results, 0)
else
raise FluidDb::TooManyRowsError.new
end
end
|
#queryForResultset(sql, params = []) ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/FluidDb/Pgsql.rb', line 72
def queryForResultset( sql, params=[] )
sql = self.format_to_sql( sql, params )
results = @connection.exec(sql)
case results.num_tuples
when -1
raise FluidDb::ConnectionError.new
else
list = Array.new
fields = results.fields
0.upto( results.ntuples() -1 ) do |nbr|
list.push self.convertTupleToHash(fields, results, nbr)
end
return list
end
end
|
#queryForValue(sql, params = []) ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/FluidDb/Pgsql.rb', line 49
def queryForValue( sql, params=[] )
sql = self.format_to_sql( sql, params )
results = @connection.exec(sql)
case results.num_tuples
when -1
raise FluidDb::ConnectionError.new
when 0
raise FluidDb::NoDataFoundError.new
when 1
return results.getvalue(0,0)
else
raise FluidDb::TooManyRowsError.new
end
end
|
#Rollback ⇒ Object
142
143
144
|
# File 'lib/FluidDb/Pgsql.rb', line 142
def Rollback
@connection.exec( "ROLLBACK", [] )
end
|