MYSQLSafe 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@ require 'mysql'
3
3
  module MYSQLSafe
4
4
  class Base
5
5
  attr_accessor :host, :database, :user, :encoding, :password
6
-
6
+
7
7
  def connect_safe(raw_sql)
8
8
  @mysql_array = []
9
9
  @encoding ||= 'utf-8'
@@ -22,8 +22,9 @@ module MYSQLSafe
22
22
  table_match = match_name(table_names, sql)
23
23
 
24
24
  if table_match
25
- column_names = get_column_names(match)
25
+ column_names = get_column_names(table_match)
26
26
  column_match = match_name(column_names, sql)
27
+ column_match = [] if !(sql.to_s.downcase.include?('where'))
27
28
  else
28
29
  raise 'MYSQLSafe error: no valid table name could be found in your SQL statement'
29
30
  end
@@ -34,9 +35,8 @@ module MYSQLSafe
34
35
  raise 'MYSQLSafe error: no valid column name(s) could be found in your SQL statement'
35
36
  end
36
37
 
37
- mysql_object = cxtn.query(ticked_sql)
38
+ mysql_object = @cxtn.query(ticked_sql)
38
39
  mysql_object.each { |row| @mysql_array.push(row) }
39
- puts "After push: #{@mysql_array}"
40
40
  rescue Mysql::Error => msqle
41
41
  puts "Error! #{msqle}, #{@mysql_array}"
42
42
  @mysql_array.push(["MYSQL Error: #{msqle}"])
@@ -46,10 +46,9 @@ module MYSQLSafe
46
46
  else
47
47
  raise "MYSQLSafe error: Host, Database, User and Password must be set to run a query. You included #{options}"
48
48
  end
49
- puts "@mysql_array is #{@mysql_array} a #{@mysql_array.class}"
50
49
  return @mysql_array
51
50
  end
52
-
51
+
53
52
  private
54
53
  def tick_sql(sql, table_array, column_array)
55
54
  ticked_sql = sql.delete("`")
@@ -62,24 +61,26 @@ module MYSQLSafe
62
61
 
63
62
  return ticked_sql
64
63
  end
65
-
66
- def get_column_names(table_name)
67
- column_names_sql = "SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='#{@database}' AND `TABLE_NAME`='#{table_name}';"
68
- column_names_results_sql = query_safe(column_names_sql)
69
-
64
+
65
+ def get_column_names(table_names)
70
66
  column_names = []
71
- column_names_results_sql.each do |name|
72
- column_names.push(name)
67
+ table_names.each do |table_name|
68
+ column_names_sql = "SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='#{@database}' AND `TABLE_NAME`='#{table_name}';"
69
+ column_names_results_sql = @cxtn.query(column_names_sql)
70
+
71
+ column_names_results_sql.each do |name|
72
+ column_names.push(name)
73
+ end
73
74
  end
74
75
 
75
76
  return column_names
76
77
  end
77
-
78
+
78
79
  def match_name(name_array, sql)
79
80
  match = []
80
81
 
81
82
  name_array.each do |name|
82
- match.push(name) if sql.to_s.include?("#{name}=") || sql.to_s[/#{name}\s+=/] || sql.to_s[/#{name}`\s+=/]
83
+ match.push(name) if sql.to_s.include?("#{name}")
83
84
  end
84
85
 
85
86
  if match.size > 0
@@ -88,34 +89,34 @@ module MYSQLSafe
88
89
  return false
89
90
  end
90
91
  end
91
-
92
+
92
93
  def query_safe(dangerous_sql)
93
94
  @cxtn.query(Mysql.escape_string(dangerous_sql))
94
95
  end
95
-
96
+
96
97
  def get_table_names
97
98
  table_names_sql = "SHOW TABLES FROM `#{@database}`;"
98
99
  table_names_results_sql = query_safe(table_names_sql)
99
100
 
100
101
  table_names = []
101
102
  table_names_results_sql.each do |name|
102
- table_names.push(name)
103
+ table_names.push(name[0])
103
104
  end
104
105
 
105
106
  return table_names
106
107
  end
107
-
108
+
108
109
  def esc_enc_string(string)
109
110
  return esc_string(enc_string(string.to_s))
110
111
  end
111
-
112
+
112
113
  def enc_string(string)
113
114
  return string.encode("#{@encoding}", "#{@encoding}", :invalid => :replace)
114
115
  end
115
-
116
+
116
117
  def esc_string(string)
117
118
  return Mysql.escape_string(string)
118
119
  end
119
-
120
+
120
121
  end
121
122
  end
@@ -1,3 +1,3 @@
1
1
  module MYSQLSafe
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -45,7 +45,7 @@ describe MYSQLSafe::Base do
45
45
  password_key = ENV['MYSQLPASSWORD'] || "password"
46
46
  @obj.password = password_key
47
47
 
48
- success = @obj.connect_safe("SELECT * FROM test LIMIT 1")
48
+ success = @obj.connect_safe("SELECT * FROM performance_test LIMIT 1")
49
49
  success.must_be_instance_of Array
50
50
  end
51
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: MYSQLSafe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: