Class: MIDB::DbengineModel

Inherits:
Object
  • Object
show all
Defined in:
lib/midb/dbengine_model.rb

Overview

This class handles engine-dependent database operations

Author:

  • unrar

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDbengineModel

Constructor - initializes the attributes with the configuration from ServerController



25
26
27
28
29
30
31
32
# File 'lib/midb/dbengine_model.rb', line 25

def initialize()
  @engine = MIDB::ServerController.config["dbengine"]
  @host = MIDB::ServerController.config["dbhost"]
  @port = MIDB::ServerController.config["dbport"]
  @uname = MIDB::ServerController.config["dbuser"]
  @pwd = MIDB::ServerController.config["dbpassword"]
  @db = MIDB::ServerController.db
end

Instance Attribute Details

#dbString

Returns Name of the database.

Returns:

  • (String)

    Name of the database



22
# File 'lib/midb/dbengine_model.rb', line 22

attr_accessor :engine, :host, :uname, :pwd, :port, :db

#engineSymbol

Returns The database engine being used.

Returns:

  • (Symbol)

    The database engine being used



22
23
24
# File 'lib/midb/dbengine_model.rb', line 22

def engine
  @engine
end

#hostString

Returns Host name where the database is located.

Returns:

  • (String)

    Host name where the database is located



22
# File 'lib/midb/dbengine_model.rb', line 22

attr_accessor :engine, :host, :uname, :pwd, :port, :db

#portFixnum

Returns Port for the database.

Returns:

  • (Fixnum)

    Port for the database



22
# File 'lib/midb/dbengine_model.rb', line 22

attr_accessor :engine, :host, :uname, :pwd, :port, :db

#pwdString

Returns Password for the database.

Returns:

  • (String)

    Password for the database.



22
# File 'lib/midb/dbengine_model.rb', line 22

attr_accessor :engine, :host, :uname, :pwd, :port, :db

#unameString

Returns Username for the database.

Returns:

  • (String)

    Username for the database



22
# File 'lib/midb/dbengine_model.rb', line 22

attr_accessor :engine, :host, :uname, :pwd, :port, :db

Instance Method Details

#connectSQLite3::Database, Mysql2::Client

Connect to the specified database

Returns:

  • (SQLite3::Database, Mysql2::Client)

    A resource referencing to the database



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/midb/dbengine_model.rb', line 37

def connect()
  # Connect to an SQLite3 database
  if @engine == :sqlite3
    sq = SQLite3::Database.open("./db/#{@db}.db")
    sq.results_as_hash = true
    return sq
  # Connect to a MySQL database
  elsif @engine == :mysql
    return Mysql2::Client.new(:host => @host, :username => @uname, :password => @pwd, :database => @db)
  end
end

#extract(result, field) ⇒ String, Fixnum

Extract a field from a query, because different engines return different types (see #query)

Parameters:

  • result (Array, Hash)

    The result of a query obtained via #query

  • field (String)

    The name of the field to be extracted.

Returns:

  • (String, Fixnum)

    The field extracted from a query



69
70
71
72
73
74
75
76
77
# File 'lib/midb/dbengine_model.rb', line 69

def extract(result, field)
  if @engine == :sqlite3
    return result[0][field] || result[field]
  elsif @engine == :mysql
    result.each do |row|
      return row[field]
    end
  end
end

#length(result) ⇒ Fixnum

Returns the length of a result, because different engines return diferent types (see #query)

Parameters:

  • result (Array, Hash)

    The result of a query obtained via #query

Returns:

  • (Fixnum)

    Length of the result.



84
85
86
87
88
89
90
# File 'lib/midb/dbengine_model.rb', line 84

def length(result)
  if @engine == :sqlite3
    return result.length
  elsif @engine == :mysql 
    return result.count
  end
end

#query(res, query) ⇒ Array, Hash

Perform a query to the database.

Parameters:

  • res (SQLite3::Database, Mysql2::Client)

    An existing database resource.

  • query (String)

    The SQL query to be ran.

Returns:

  • (Array, Hash)

    Returns an array of hashes for SQLite3 or a hash for MySQL



55
56
57
58
59
60
61
# File 'lib/midb/dbengine_model.rb', line 55

def query(res, query)
  if @engine == :sqlite3
    return res.execute(query)
  elsif @engine == :mysql
    return res.query(query)
  end
end