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

.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