# File lib/arel/select_manager.rb, line 16 16: def constraints 17: @ctx.wheres 18: end
Produces an Arel::Nodes::Exists node
# File lib/arel/select_manager.rb, line 27 27: def exists 28: Arel::Nodes::Exists.new @ast 29: end
# File lib/arel/select_manager.rb, line 64 64: def from table 65: table = Nodes::SqlLiteral.new(table) if String === table 66: # FIXME: this is a hack to support 67: # test_with_two_tables_in_from_without_getting_double_quoted 68: # from the AR tests. 69: if @ctx.froms 70: source = @ctx.froms 71: 72: if Nodes::SqlLiteral === table && Nodes::Join === source 73: source.left = table 74: table = source 75: end 76: end 77: 78: @ctx.froms = table 79: self 80: end
# File lib/arel/select_manager.rb, line 53 53: def group *columns 54: columns.each do |column| 55: # FIXME: backwards compat 56: column = Nodes::SqlLiteral.new(column) if String === column 57: column = Nodes::SqlLiteral.new(column.to_s) if Symbol === column 58: 59: @ctx.groups.push Nodes::Group.new column 60: end 61: self 62: end
# File lib/arel/select_manager.rb, line 94 94: def having expr 95: expr = Nodes::SqlLiteral.new(expr) if String === expr 96: 97: @ctx.having = Nodes::Having.new(expr) 98: self 99: end
FIXME: this method should go away
# File lib/arel/select_manager.rb, line 179 179: def insert values 180: im = InsertManager.new @engine 181: table = @ctx.froms 182: primary_key_name = (primary_key = table.primary_key) && primary_key.name 183: # FIXME: in AR tests values sometimes were Array and not Hash therefore is_a?(Hash) check is added 184: primary_key_value = primary_key && values.is_a?(Hash) && values[primary_key] 185: im.into table 186: im.insert values 187: # Oracle adapter needs primary key name to generate RETURNING ... INTO ... clause 188: # for tables which assign primary key value using trigger. 189: # RETURNING ... INTO ... clause will be added only if primary_key_value is nil 190: # therefore it is necessary to pass primary key value as well 191: @engine.connection.insert im.to_sql, 'AREL', primary_key_name, primary_key_value 192: end
# File lib/arel/select_manager.rb, line 82 82: def join relation, klass = Nodes::InnerJoin 83: return self unless relation 84: 85: case relation 86: when String, Nodes::SqlLiteral 87: raise if relation.blank? 88: from Nodes::StringJoin.new(@ctx.froms, relation) 89: else 90: from klass.new(@ctx.froms, relation, nil) 91: end 92: end
# File lib/arel/select_manager.rb, line 143 143: def join_sql 144: return nil unless @ctx.froms 145: 146: viz = Visitors::JoinSql.new @engine 147: Nodes::SqlLiteral.new viz.accept @ctx 148: end
# File lib/arel/select_manager.rb, line 156 156: def joins manager 157: manager.join_sql 158: end
# File lib/arel/select_manager.rb, line 37 37: def lock locking = true 38: # FIXME: do we even need to store this? If locking is +false+ shouldn't 39: # we just remove the node from the AST? 40: @ast.lock = Nodes::Lock.new 41: self 42: end
# File lib/arel/select_manager.rb, line 44 44: def locked 45: @ast.lock 46: end
# File lib/arel/select_manager.rb, line 48 48: def on *exprs 49: @ctx.froms.constraint = Nodes::On.new(collapse(exprs)) 50: self 51: end
# File lib/arel/select_manager.rb, line 115 115: def order *expr 116: # FIXME: We SHOULD NOT be converting these to SqlLiteral automatically 117: @ast.orders.concat expr.map { |x| 118: String === x || Symbol === x ? Nodes::SqlLiteral.new(x.to_s) : x 119: } 120: self 121: end
# File lib/arel/select_manager.rb, line 150 150: def order_clauses 151: Visitors::OrderClauses.new(@engine).accept(@ast).map { |x| 152: Nodes::SqlLiteral.new x 153: } 154: end
# File lib/arel/select_manager.rb, line 123 123: def orders 124: @ast.orders 125: end
# File lib/arel/select_manager.rb, line 101 101: def project *projections 102: # FIXME: converting these to SQLLiterals is probably not good, but 103: # rails tests require it. 104: @ctx.projections.concat projections.map { |x| 105: [Symbol, String].include?(x.class) ? SqlLiteral.new(x.to_s) : x 106: } 107: self 108: end
# File lib/arel/select_manager.rb, line 20 20: def skip amount 21: @ast.offset = Nodes::Offset.new(amount) 22: self 23: end
# File lib/arel/select_manager.rb, line 138 138: def take limit 139: @ast.limit = limit 140: self 141: end
# File lib/arel/select_manager.rb, line 12 12: def taken 13: @ast.limit 14: end
# File lib/arel/select_manager.rb, line 110 110: def where expr 111: @ctx.wheres << expr 112: self 113: end
# File lib/arel/select_manager.rb, line 31 31: def where_clauses 32: #warn "where_clauses is deprecated" if $VERBOSE 33: to_sql = Visitors::ToSql.new @engine 34: @ctx.wheres.map { |c| to_sql.accept c } 35: end
# File lib/arel/select_manager.rb, line 195 195: def collapse exprs 196: return exprs.first if exprs.length == 1 197: 198: right = exprs.pop 199: left = exprs.pop 200: 201: right = Nodes::SqlLiteral.new(right) if String === right 202: 203: right = Nodes::And.new left, right 204: exprs.reverse.inject(right) { |memo,expr| 205: Nodes::And.new(expr, memo) 206: } 207: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.