| Description: |
# == Changes
# Version 4 uses pure Ruby instead of special string query, is fater and cleaner.
#
# == Description
# Build safe sql query from a data hash.
# You don't have to escape values by hand or iterate over arrays
# to produce dynamic lists anymore. No sql injections. Simple and powerful ;-)
#
# == Usage
#
# 1. Create a data hash.
# hsh = {
# :bad_characters => 'very bad characters: !@#$@#%&*\"\' ',
# :tblname => 'my_foo_table',
# :mydata => {
# :a => 'AAA',
# :b => '',
# :c => nil,
# :d => 'DDD',
# :e => false
# }
# }
#
# 2. Create SafeQuery4 instance; FooDB is used because of the 'escape' method. You can specify another name of the method as the second parameter.
# sq = SafeQuery4.new( FooDB.new, hsh )
#
# 3. Finally create safe queries!
#
# puts "Everything is automatically escaped: "
#
# puts " INSERT INTO #{sq.tblname} ( very_bad_characters ) VALUES ( '#{sq.bad_characters}' ) "
# => INSERT INTO my_foo_table ( very_bad_characters ) VALUES ( 'very bad characters: !@#$@#%&*\\"\' ' )
#
# puts "More examples: "
#
# puts " INSERT INTO #{sq.tblname} (#{sq.keys_of :mydata }) VALUES (#{sq.values_of :mydata }) "
# => INSERT INTO my_foo_table (c, d, a, e, b) VALUES (null, 'DDD', 'AAA', false, '')
# puts " SELECT * FROM #{sq.tblname} WHERE #{sq.LIKE_list_of :mydata } "
# => SELECT * FROM my_foo_table WHERE c LIKE null AND d LIKE 'DDD' AND a LIKE 'AAA' AND not(e) AND b LIKE ''
# puts " SELECT * FROM #{sq.tblname} WHERE #{sq.LIKE_list_of :mydata, :separator=>'OR' } "
# => SELECT * FROM my_foo_table WHERE c LIKE null OR d LIKE 'DDD' OR a LIKE 'AAA' OR not(e) OR b LIKE ''
# puts " UPDATE #{sq.tblname} SET #{sq.pair_list_of :mydata } "
# => UPDATE my_foo_table SET c=null AND d='DDD' AND a='AAA' AND not(e) AND b=''
#
# puts "Using except filter: "
#
# puts " UPDATE #{sq.tblname} SET #{sq.pair_list_of :mydata, :except=>:nil } "
# => UPDATE my_foo_table SET d='DDD' AND a='AAA' AND not(e) AND b=''
# puts " INSERT INTO #{sq.tblname} (#{sq.keys_of :mydata, :except=>[:nil, :empty] }) VALUES (#{sq.values_of :mydata, :except=>[:nil, :empty] }) "
# => INSERT INTO my_foo_table (d, a, e) VALUES ('DDD', 'AAA', false)
# puts " SELECT * FROM #{sq.tblname} WHERE #{sq.LIKE_list_of :mydata, :except=>[ :false, :nil ] } "
# => SELECT * FROM my_foo_table WHERE d LIKE 'DDD' AND a LIKE 'AAA' AND b LIKE ''
|