Guest User

Untitled

a guest
Jul 26th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. module Sequel
  2. module JDBC
  3. # Database and Dataset support for AS400 databases accessed via JDBC.
  4. module AS400
  5. # Instance methods for AS400 Database objects accessed via JDBC.
  6. module DatabaseMethods
  7. # HAS400 uses the :h2 database type.
  8. def database_type
  9. :as400
  10. end
  11.  
  12. # Return Sequel::JDBC::AS400::Dataset object with the given opts.
  13. def dataset(opts=nil)
  14. Sequel::JDBC::AS400::Dataset.new(self, opts)
  15. end
  16.  
  17. # TODO: Fix for AS400
  18. def last_insert_id(conn, opts={})
  19. stmt = conn.createStatement
  20. begin
  21. rs = stmt.executeQuery('SELECT IDENTITY();')
  22. rs.next
  23. rs.getInt(1)
  24. ensure
  25. stmt.close
  26. end
  27. end
  28. end
  29.  
  30. # Dataset class for AS400 datasets accessed via JDBC.
  31. class Dataset < JDBC::Dataset
  32. WILDCARD = Sequel::LiteralString.new('*').freeze
  33.  
  34. def select_sql
  35. return super unless l = @opts[:limit]
  36. o = @opts[:offset] || 0
  37. order = @opts[:order]
  38. dsa1 = dataset_alias(1)
  39. dsa2 = dataset_alias(2)
  40. rn = row_number_column
  41. irn = Sequel::SQL::Identifier.new(rn).qualify(dsa2)
  42. subselect_sql(unlimited.
  43. from_self(:alias=>dsa1).
  44. select_more(Sequel::SQL::QualifiedIdentifier.new(dsa1, WILDCARD),
  45. Sequel::SQL::WindowFunction.new(:ROW_NUMBER.sql_function, Sequel::SQL::Window.new(:order=>order)).as(rn)).
  46. from_self(:alias=>dsa2).
  47. select(Sequel::SQL::QualifiedIdentifier.new(dsa2, WILDCARD)).
  48. where((irn > o) & (irn <= l + o)))
  49. end
  50.  
  51. def supports_window_functions?
  52. true
  53. end
  54.  
  55. private
  56.  
  57. # The alias to use for the row_number column when emulating LIMIT and OFFSET
  58. def row_number_column
  59. :x_sequel_row_number_x
  60. end
  61. end
  62. end
  63. end
  64. end
Add Comment
Please, Sign In to add comment