aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel/engines/sql/compilers/ibm_db_compiler.rb
blob: 8c5779a35e8afe7b0badba23a583712dd12c9f22 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# +-----------------------------------------------------------------------+
# |                                                                       |
# | Copyright (c) 2010 IBM Corporation                                    |
# |                                                                       |
# | Permission is hereby granted, free of charge, to any person obtaining |
# | a copy of this software and associated documentation files (the       |
# | "Software"), to deal in the Software without restriction, including   |
# | without limitation the rights to use, copy, modify, merge, publish,   |
# | distribute, sublicense, and/or sell copies of the Software, and to    |
# | permit persons to whom the Software is furnished to do so, subject to |
# | the following conditions:                                             |
# |                                                                       |
# | The above copyright notice and this permission notice shall be        |
# | included in all copies or substantial portions of the Software.       |
# |                                                                       |
# | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       |
# | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    |
# | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.|
# | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR      |
# | ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION           |
# | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
# | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.       |
# |                                                                       |
# +-----------------------------------------------------------------------+

#
#  Author: Praveen Devarao <praveendrl@in.ibm.com>
#

module Arel
  module SqlCompiler
    class IBM_DBCompiler < GenericCompiler

      def limited_update_conditions(conditions, taken)
        quoted_primary_key = engine.quote_table_name(primary_key)
        update_conditions = "WHERE #{quoted_primary_key} IN (SELECT #{quoted_primary_key} FROM #{engine.connection.quote_table_name table.name} #{conditions} " #Note: - ')' not added, limit segment is to be appended
        engine.add_limit_offset!(update_conditions,{:limit=>taken,:offset=>nil})
        update_conditions << ")" # Close the sql segment
        update_conditions
      end

      def add_limit_on_delete(taken)
        raise "IBM_DB does not support limit on deletion" # Limiting the number of rows to be deleted is not supported by IBM_DB
      end

    end
  end
end