Class: Gloo::Objs::Mysql

Inherits:
Core::Obj show all
Defined in:
lib/gloo/objs/data/mysql.rb

Constant Summary collapse

KEYWORD =
'mysql'.freeze
KEYWORD_SHORT =
'mysql'.freeze
HOST =
'host'.freeze
DB =
'database'.freeze
USER =
'username'.freeze
PASSWD =
'password'.freeze

Constants inherited from Core::Baseo

Core::Baseo::NOT_IMPLEMENTED_ERR

Instance Attribute Summary

Attributes inherited from Core::Obj

#children, #parent, #value

Attributes inherited from Core::Baseo

#name

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Core::Obj

#add_child, can_create?, #can_receive_message?, #child_count, #child_index, #contains_child?, #delete_children, #dispatch, #display_value, #find_add_child, #find_child, help, inherited, #initialize, #is_alias?, #is_function?, #msg_reload, #msg_unload, #multiline_value?, #pn, #remove_child, #render, #root?, #send_message, #set_parent, #set_value, #type_display, #value_display, #value_is_array?, #value_is_blank?, #value_string?

Methods inherited from Core::Baseo

#initialize, #type_display

Constructor Details

This class inherits a constructor from Gloo::Core::Obj

Class Method Details

.messagesObject

Get a list of message names that this object receives.



80
81
82
# File 'lib/gloo/objs/data/mysql.rb', line 80

def self.messages
  return super + [ 'verify' ]
end

.short_typenameObject

The short name of the object type.



43
44
45
# File 'lib/gloo/objs/data/mysql.rb', line 43

def self.short_typename
  return KEYWORD_SHORT
end

.typenameObject

The name of the object type.



36
37
38
# File 'lib/gloo/objs/data/mysql.rb', line 36

def self.typename
  return KEYWORD
end

Instance Method Details

#add_children_on_create?Boolean

Does this object have children to add when an object is created in interactive mode? This does not apply during obj load, etc.

Returns:



56
57
58
# File 'lib/gloo/objs/data/mysql.rb', line 56

def add_children_on_create?
  return true
end

#add_default_childrenObject

Add children to this object. This is used by containers to add children needed for default configurations.



65
66
67
68
69
70
71
# File 'lib/gloo/objs/data/mysql.rb', line 65

def add_default_children
  fac = @engine.factory
  fac.create_string HOST, nil, self
  fac.create_string DB, nil, self
  fac.create_string USER, nil, self
  fac.create_string PASSWD, nil, self
end

#get_clientObject

Get the client object. It might be cached, so check first. If it is not cached, create a new one.



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/gloo/objs/data/mysql.rb', line 103

def get_client
  app = @engine.running_app

  client = app.db_client_for_obj( self ) if app 

  if client && client.ping
    @engine.log.debug "Connection is established and active."
    return client
  elsif client
    @engine.log.debug "Connection is established but NOT active.  Reconnecting."
  else
    @engine.log.debug "Opening a new Connection."
  end

  h = {
    host: host_value,
    database: db_value,
    username: user_value,
    password: passwd_value
  }
  client = Mysql2::Client.new( h )

  app.cache_db_client( self, client ) if app
  
  return client
end

#get_query_result(result) ⇒ Object

Based on the result set, build a QueryResult object.



172
173
174
# File 'lib/gloo/objs/data/mysql.rb', line 172

def get_query_result( result )
  return QueryResult.new result[0], result[1], @engine
end

#msg_verifyObject

SSH to the host and execute the command, then update result.



87
88
89
90
91
# File 'lib/gloo/objs/data/mysql.rb', line 87

def msg_verify
  return unless connects?

  @engine.heap.it.set_to true
end

#query(sql, params = nil) ⇒ Object

Open a connection and execute the SQL statement. Return the resulting data.



134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/gloo/objs/data/mysql.rb', line 134

def query( sql, params = nil )
  client = get_client

  heads = []
  data = []
  begin
    if params
      pst = client.prepare( sql )
      rs = pst.execute( *params, :as => :array )
      if rs
        rs.each do |row|
          arr = []
          row.each do |o| 
            arr << o
          end
          data << arr
        end
      end
    else
      rs = client.query( sql, :as => :array ) 
      if rs
        rs.each do |row|
          data << row
        end
      end
    end

    heads = rs.fields if rs
  rescue => e
    @engine.err e.message
  end

  return [ heads, data ]
end