Class: SqlStmtLib::MysqlBuilder
- Inherits:
-
Object
- Object
- SqlStmtLib::MysqlBuilder
- Defined in:
- lib/sqlstmt/mysql/build.rb
Instance Method Summary collapse
- #build_from_clause ⇒ Object
- #build_join_clause ⇒ Object
- #build_set_clause ⇒ Object
- #build_stmt ⇒ Object
- #build_stmt_delete ⇒ Object
- #build_stmt_insert ⇒ Object
- #build_stmt_select ⇒ Object
- #build_stmt_update ⇒ Object
- #build_table_list ⇒ Object
- #build_where_clause ⇒ Object
- #combine_parts(parts) ⇒ Object
-
#initialize(data) ⇒ MysqlBuilder
constructor
A new instance of MysqlBuilder.
- #join_to_str(join) ⇒ Object
- #shared_select(fields) ⇒ Object
- #simple_clause(keywords, value) ⇒ Object
- #table_to_str(table) ⇒ Object
Constructor Details
#initialize(data) ⇒ MysqlBuilder
Returns a new instance of MysqlBuilder.
5 6 7 |
# File 'lib/sqlstmt/mysql/build.rb', line 5 def initialize(data) @data = data end |
Instance Method Details
#build_from_clause ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# 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 ⇒ Object
136 137 138 |
# 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 ⇒ Object
109 110 111 112 113 114 115 |
# 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 ⇒ Object
9 10 11 12 |
# 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 ⇒ Object
70 71 72 73 74 75 76 77 |
# 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 ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# 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 ⇒ Object
24 25 26 27 28 29 30 31 |
# 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 ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 |
# 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 ⇒ Object
124 125 126 |
# 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 ⇒ Object
140 141 142 |
# 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) ⇒ Object
14 15 16 17 18 19 20 21 22 |
# 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) ⇒ Object
132 133 134 |
# File 'lib/sqlstmt/mysql/build.rb', line 132 def join_to_str(join) return [join.kwstr, join.table.str, join.on_expr].join(' ') end |
#shared_select(fields) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/sqlstmt/mysql/build.rb', line 79 def shared_select(fields) parts = ['SELECT'] if @data.straight_join parts << 'STRAIGHT_JOIN' end if @data.distinct parts << 'DISTINCT' end parts << fields.join(',') parts << build_from_clause return combine_parts(parts) end |
#simple_clause(keywords, value) ⇒ Object
128 129 130 |
# File 'lib/sqlstmt/mysql/build.rb', line 128 def simple_clause(keywords, value) return value ? " #{keywords} #{value}" : '' end |
#table_to_str(table) ⇒ Object
117 118 119 120 121 122 |
# 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 |