class SqlStmtLib::MysqlBuilder
Public Class Methods
new(data)
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 5 def initialize(data) @data = data end
Public Instance Methods
build_from_clause()
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 92 def build_from_clause parts = ['FROM'] parts << build_table_list parts << build_join_clause parts << build_where_clause parts << simple_clause('GROUP BY', @data.group_by) if @data.with_rollup parts << 'WITH ROLLUP' end if !@data.havings.empty? parts << "HAVING #{@data.havings.join(' AND ')}" end parts << simple_clause('ORDER BY', @data.order_by) parts << simple_clause('LIMIT', @data.limit) return combine_parts(parts) end
build_join_clause()
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 136 def build_join_clause return ' ' + @data.joins.map {|join| join_to_str(join)}.uniq.join(' ') end
build_set_clause()
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 109 def build_set_clause set_exprs = [] @data.set_fields.each_with_index do |field, index| set_exprs << "#{field} = #{@data.set_values[index]}" end return set_exprs.join(', ') end
build_stmt()
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 9 def build_stmt method_name = "build_stmt_#{@data.stmt_type}" return send(method_name) end
build_stmt_delete()
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 70 def build_stmt_delete parts = ['DELETE'] if !@data.tables_to_delete.empty? parts << @data.tables_to_delete.join(',') end parts << build_from_clause return combine_parts(parts) end
build_stmt_insert()
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 46 def build_stmt_insert parts = [] if @data.replace parts << 'REPLACE' else parts << 'INSERT' end if @data.ignore parts << 'IGNORE' end parts << "INTO #{@data.into}" if !@data.set_fields.empty? field_list = @data.set_fields.join(',') parts << "(#{field_list})" end parts << shared_select(@data.set_values) if @data.on_duplicate parts << "ON DUPLICATE KEY UPDATE #{@data.on_duplicate}" elsif @data.ignore_duplicate parts << "ON DUPLICATE KEY UPDATE #{@data.ignore_duplicate} = #{@data.ignore_duplicate}" end return combine_parts(parts) end
build_stmt_select()
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 24 def build_stmt_select parts = [] parts << shared_select(@data.gets) if @data.outfile parts << "INTO OUTFILE #{@data.outfile}" end return combine_parts(parts) end
build_stmt_update()
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 33 def build_stmt_update parts = [ 'UPDATE', build_table_list, build_join_clause, 'SET', build_set_clause, build_where_clause, simple_clause('LIMIT', @data.limit), ] return combine_parts(parts) end
build_table_list()
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 124 def build_table_list return @data.tables.map {|table| table_to_str(table) }.join(',') end
build_where_clause()
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 140 def build_where_clause return @data.wheres.empty? ? '' : " WHERE #{@data.wheres.join(' AND ')}" end
combine_parts(parts)
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 14 def combine_parts(parts) parts.each do |str| str.strip! end parts.reject! do |str| str.nil? || str.empty? end return parts.join(' ') end
join_to_str(join)
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 132 def join_to_str(join) return [join.kwstr, join.table.str, join.on_expr].join(' ') end
simple_clause(keywords, value)
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 128 def simple_clause(keywords, value) return value ? " #{keywords} #{value}" : '' end
table_to_str(table)
click to toggle source
# File lib/sqlstmt/mysql/build.rb, line 117 def table_to_str(table) if table.index return "#{table.str} USE INDEX (#{table.index})" end return table.str end