Class: FluidDb2::Firebird

Inherits:
Base
  • Object
show all
Defined in:
lib/fluiddb2/firebird.rb

Overview

Firebird

Instance Attribute Summary

Attributes inherited from Base

#connection, #verbose

Instance Method Summary collapse

Methods inherited from Base

#initialize, #reconnect, #verbose_log

Constructor Details

This class inherits a constructor from FluidDb2::Base

Instance Method Details

#beginObject

Transaction Semantics



112
113
114
# File 'lib/fluiddb2/firebird.rb', line 112

def begin
  @connection.transaction
end

#closeObject



33
34
35
# File 'lib/fluiddb2/firebird.rb', line 33

def close
  @connection.close
end

#commitObject

Transaction Semantics



117
118
119
# File 'lib/fluiddb2/firebird.rb', line 117

def commit
  @connection.commit
end

#connectObject

Connect to Db.

Parameters:

  • uri (String)

    a location for the resource to which we will attach, eg mysql://user:[email protected]/foo



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/fluiddb2/firebird.rb', line 12

def connect
  uri = @uri

  user = uri.user || 'sysdba'
  password = uri.password || 'masterkey'
  port = uri.port || 3050

  path = uri.path
  path = path.slice(1, uri.path.length - 1) if path.slice(0, 3) == '/C:'
  path = URI.unescape(path)

  # The Database class acts as a factory for Connections.
  # It can also create and drop databases.
  db = Database.new(:database => "#{uri.host}/#{port}:#{path}",
                    :username => user,
                    :password => password)
  # :database is the only parameter without a default.
  # Let's connect to the database, creating it if it doesn't already exist.
  @connection = db.connect rescue db.create.connect
end

#exec_params(sql, params, expected_affected_rows = nil) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/fluiddb2/firebird.rb', line 92

def exec_params(sql, params, expected_affected_rows = nil)
  parts = sql.split('?')
  sql = ''
  parts.each_with_index do |p, idx|
    sql += p
    sql += "$#{idx + 1}" if idx < parts.length - 1
  end
  affected_rows = @connection.exec_params(sql, params)

  if !expected_affected_rows.nil? && affected_rows != expected_affected_rows
    fail ExpectedAffectedRowsError,
         "Expected affected rows, #{expected_affected_rows}, Actual affected rows, #{affected_rows}"
  end
end

#execute(sql, params = [], expected_affected_rows = nil) ⇒ Object



81
82
83
84
85
86
87
88
89
90
# File 'lib/fluiddb2/firebird.rb', line 81

def execute(sql, params = [], expected_affected_rows = nil)
  sql = format_to_sql(sql, params)
  verbose_log "#{self.class.name}.execute. #{sql}"
  affected_rows = @connection.execute(sql)

  if !expected_affected_rows.nil? && affected_rows != expected_affected_rows
    fail ExpectedAffectedRowsError,
          "Expected affected rows, #{expected_affected_rows}, Actual affected rows, #{affected_rows}"
  end
end

#insert(_sql, _params) ⇒ Object



107
108
109
# File 'lib/fluiddb2/firebird.rb', line 107

def insert(_sql, _params)
  fail 'Firebird uses SEQUENCES, so possibly easier to use 2 executes'
end

#query_for_array(sql, params = []) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/fluiddb2/firebird.rb', line 37

def query_for_array(sql, params = [])
  sql = format_to_sql(sql, params)
  list = @connection.query(:hash, sql)

  case list.length
  when -1
    fail FluidDb2::ConnectionError
  when 0
    fail FluidDb2::NoDataFoundError
  when 1
    return list[0]
  else
    fail FluidDb2::TooManyRowsError
  end
end

#query_for_resultset(sql, params = []) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/fluiddb2/firebird.rb', line 69

def query_for_resultset(sql, params = [])
  sql = format_to_sql(sql, params)
  list = @connection.query(:hash, sql)

  case list.length
  when -1
    fail FluidDb::ConnectionError
  else
    return list
  end
end

#query_for_value(sql, params = []) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/fluiddb2/firebird.rb', line 53

def query_for_value(sql, params = [])
  sql = format_to_sql(sql, params)
  results = @connection.query(sql)

  case results.length
  when -1
    fail FluidDb::ConnectionError
  when 0
    fail FluidDb::NoDataFoundError
  when 1
    return results[0][0]
  else
    fail FluidDb::TooManyRowsError
  end
end

#rollbackObject

Transaction Semantics



122
123
124
# File 'lib/fluiddb2/firebird.rb', line 122

def rollback
  @connection.rollback
end