Class: RailsAdminContent::Client

Inherits:
Mysql2::Client
  • Object
show all
Defined in:
lib/rails_admin_content/client.rb

Constant Summary collapse

Syntax =
/limit\s+\d+,\d+|limit\s+\d+/
Syntax_table =
/from\s+(\w+)/

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.compose(params) ⇒ Object



41
42
43
# File 'lib/rails_admin_content/client.rb', line 41

def self.compose(params)
  "SELECT * FROM #{params[:id]} WHERE #{params["field"].inject([]){|a, (key,value)| a << compose_key(params["calc"][key],key, value); a }.join('and')}"
end

.compose_key(calc, key, value) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/rails_admin_content/client.rb', line 45

def self.compose_key(calc,key,value)
  case calc
  when '=', '>', '<'
    " `#{key}` #{calc} '#{value}' "
  when 'IN'
    " `#{key}` IN (#{value}) "
  when ''
    " `#{key}`  != '#{value}' "
  when 'LIKE'
    " `#{key}` LIKE '%#{value}%' "
  when ''
    " `#{key}`  >= '#{value}' "
  when ''
    " `#{key}`  <= '#{value}' "
  end
end

.compose_update_sql(table_name, fields) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
# File 'lib/rails_admin_content/client.rb', line 76

def self.compose_update_sql(table_name,fields)
  columns = desc_table(table_name)
  fields.inject([]) do |array, field|
    columns.each do |column|
      if field[0] == column["Field"]
        array << (%w(int decimal tinyint).include?(column["Type"].gsub(/\(.*?\)/,'')) ? "#{field[0]} = #{field[1]}" : "#{field[0]} = REPLACE(REPLACE(REPLACE('#{field[1]}', '&','&amp;'), '>', '&gt;'), '<', '&lt;')")
      end
    end
    array
  end.join(',')
end

.connObject



18
19
20
# File 'lib/rails_admin_content/client.rb', line 18

def self.conn
  @client ||= new ActiveRecord::Base.connection_config
end

.delete(table_name, ids) ⇒ Object



63
64
65
# File 'lib/rails_admin_content/client.rb', line 63

def self.delete(table_name, ids)
  conn.origin_query("DELETE FROM #{table_name} WHERE id IN (#{ids.join(',')})") if ids.is_a?(Array)
end

.desc_table(table_name) ⇒ Object



88
89
90
# File 'lib/rails_admin_content/client.rb', line 88

def self.desc_table(table_name)
  conn.origin_query("DESC #{table_name}").each
end

.get_tablesObject



37
38
39
# File 'lib/rails_admin_content/client.rb', line 37

def self.get_tables
  @tables ? @tables : @tables = conn.origin_query('SHOW TABLES')
end

.insert(table_name, field) ⇒ Object



67
68
69
# File 'lib/rails_admin_content/client.rb', line 67

def self.insert(table_name, field)
  conn.origin_query("INSERT INTO #{table_name} (#{field.keys.join(',')}) VALUES ('#{field.values.join("','")}')")
end

.limit(query_sql, page = 1, stint) ⇒ Object



32
33
34
35
# File 'lib/rails_admin_content/client.rb', line 32

def self.limit(query_sql, page=1, stint)
  page = page == 1 ? page = 0 : page.to_i*stint.to_i-stint.to_i
  query_sql.downcase.match(Syntax).present? ? query_sql.downcase.gsub(Syntax, "LIMIT #{page},#{stint}") : "#{query_sql} LIMIT #{page},#{stint}"
end

.modify_table_column_default_value(table_name, column, value, field_type) ⇒ Object



96
97
98
99
100
101
102
103
104
105
# File 'lib/rails_admin_content/client.rb', line 96

def self.modify_table_column_default_value(table_name, column, value, field_type)
  default_value = case field_type.gsub(/\(.*?\)/,'')
  when "tinyint" then value.present?
  when "datetime" then value.to_time.to_s(:db)
  when "int" then value.to_i
  else
    value.to_s
  end
  conn.origin_query("ALTER TABLE #{table_name} ALTER COLUMN #{column} SET DEFAULT '#{default_value}'")
end

.query(query_sql, page = nil, stint = nil) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/rails_admin_content/client.rb', line 24

def self.query(query_sql, page=nil, stint=nil)
  self.table_name = query_sql.downcase.match(Syntax_table)[1] if query_sql.downcase.match(Syntax_table)
  self.total_nums = conn.origin_query(query_sql).size
  query_sql = limit(query_sql, page, stint) if stint && page
  query_sql = query_sql.gsub(/;/, '')
  conn.origin_query(query_sql)
end

.select_field(type) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'lib/rails_admin_content/client.rb', line 8

def self.select_field(type)
  case type.gsub(/\(.*?\)/,'')
  when "tinyint" then [['等于', '='], ['不等于', '']]
  when "datetime" then [['等于', '='], ['不等于', ''], ['大于', '>'], ['小于','<']]
  when "int" then [['等于', '='], ['不等于', ''], ['大于', '>'], ['小于','<'], ['含有', 'IN']]
  else
    [['等于', '='], ['不等于', ''], ['包含', 'LIKE']]
  end
end

.show_create_sql(table_name) ⇒ Object



92
93
94
# File 'lib/rails_admin_content/client.rb', line 92

def self.show_create_sql(table_name)
  conn.origin_query("SHOW CREATE TABLE #{table_name}").each
end

.update(table_name, id, fields) ⇒ Object



71
72
73
74
# File 'lib/rails_admin_content/client.rb', line 71

def self.update(table_name, id, fields)
  update_str = "UPDATE #{table_name} SET #{compose_update_sql(table_name, fields.to_a)}  WHERE id = #{id}"
  conn.origin_query update_str
end

Instance Method Details

#origin_queryObject



22
# File 'lib/rails_admin_content/client.rb', line 22

alias :origin_query :query