Guest User

Untitled

a guest
Mar 4th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.76 KB | None | 0 0
  1. ========== tester.rb
  2. require 'rubygems'
  3. require 'sequel'
  4. require 'logger'
  5.  
  6. Sequel.connect(:database => 'sequel_tester', :adapter => 'mysql', :host => 'localhost', :username => 'root', :password => '', :logger => Logger.new('sequel.log'))
  7.  
  8. class Animal < Sequel::Model
  9. set_schema do
  10. primary_key :id
  11. String :name, :unique => true
  12. end
  13.  
  14. def self.multi_insert_ignore(*args)
  15. def dataset.multi_insert_sql(columns,values)
  16. sql = super(columns,values)
  17. sql[0].gsub!(/^INSERT/,'INSERT IGNORE')
  18. end
  19. multi_insert(*args)
  20. end
  21.  
  22. def self.multi_insert_update(*args)
  23. def dataset.multi_insert_sql(columns,values)
  24. sql = super(columns,values)
  25. dup = columns.map {|column| "#{column}=VALUES(#{column})"}.join(', ')
  26. sql[0] << " ON DUPLICATE KEY UPDATE #{dup}"
  27. end
  28. multi_insert(*args)
  29. end
  30. end
  31.  
  32. Animal.create_table unless Animal.table_exists?
  33. Animal.delete_all
  34.  
  35. @columns = [:name,:kind]
  36.  
  37. @values1 = [
  38. ['sally','monkey'],
  39. ['bob','bird'],
  40. ['john','monkey'],
  41. ['mark','elephant'],
  42. ['fred','bird']
  43. ]
  44.  
  45. @values2 = [
  46. ['sally','monkey2'],
  47. ['bob','bird2'],
  48. ['john','monkey2'],
  49. ['mark','elephant2'],
  50. ['fred','bird2']
  51. ]
  52.  
  53. def ignore
  54. Animal.multi_insert_ignore(@columns,@values1, :slice => 2)
  55. end
  56.  
  57. def update
  58. Animal.multi_insert_update(@columns,@values2, :slice => 2)
  59. end
  60.  
  61. def results
  62. puts "#{Animal.first.name} : #{Animal.first.kind}"
  63. end
  64.  
  65. ignore
  66. results
  67. ignore
  68. results
  69. update
  70. results
  71. update
  72. results
  73.  
  74. ========== output from command line
  75. $ irb -r tester.rb
  76. sally : monkey
  77. sally : monkey
  78. sally : monkey2
  79. sally : monkey2
  80.  
  81.  
  82. ========== sequel.log
  83.  
  84. # Logfile created on Tue Mar 24 14:46:17 -0400 2009 by /
  85. I, [2009-03-24T14:46:17.736067 #68545] INFO -- : DESCRIBE `animals`
  86. I, [2009-03-24T14:46:17.740144 #68545] INFO -- : DELETE FROM `animals`
  87. I, [2009-03-24T14:46:17.740815 #68545] INFO -- : BEGIN
  88. I, [2009-03-24T14:46:17.740995 #68545] INFO -- : INSERT IGNORE INTO `animals` (`name`, `kind`) VALUES ('sally', 'monkey'), ('bob', 'bird')
  89. I, [2009-03-24T14:46:17.741872 #68545] INFO -- : COMMIT
  90. I, [2009-03-24T14:46:17.742173 #68545] INFO -- : BEGIN
  91. I, [2009-03-24T14:46:17.742338 #68545] INFO -- : INSERT IGNORE INTO `animals` (`name`, `kind`) VALUES ('john', 'monkey'), ('mark', 'elephant')
  92. I, [2009-03-24T14:46:17.743008 #68545] INFO -- : COMMIT
  93. I, [2009-03-24T14:46:17.743265 #68545] INFO -- : BEGIN
  94. I, [2009-03-24T14:46:17.743420 #68545] INFO -- : INSERT IGNORE INTO `animals` (`name`, `kind`) VALUES ('fred', 'bird')
  95. I, [2009-03-24T14:46:17.743852 #68545] INFO -- : COMMIT
  96. I, [2009-03-24T14:46:17.744188 #68545] INFO -- : SELECT * FROM `animals` LIMIT 1
  97. I, [2009-03-24T14:46:17.745010 #68545] INFO -- : SELECT * FROM `animals` LIMIT 1
  98. I, [2009-03-24T14:46:17.745815 #68545] INFO -- : BEGIN
  99. I, [2009-03-24T14:46:17.746049 #68545] INFO -- : INSERT IGNORE INTO `animals` (`name`, `kind`) VALUES ('sally', 'monkey'), ('bob', 'bird')
  100. I, [2009-03-24T14:46:17.746801 #68545] INFO -- : COMMIT
  101. I, [2009-03-24T14:46:17.747110 #68545] INFO -- : BEGIN
  102. I, [2009-03-24T14:46:17.747277 #68545] INFO -- : INSERT IGNORE INTO `animals` (`name`, `kind`) VALUES ('john', 'monkey'), ('mark', 'elephant')
  103. I, [2009-03-24T14:46:17.747903 #68545] INFO -- : COMMIT
  104. I, [2009-03-24T14:46:17.748162 #68545] INFO -- : BEGIN
  105. I, [2009-03-24T14:46:17.748316 #68545] INFO -- : INSERT IGNORE INTO `animals` (`name`, `kind`) VALUES ('fred', 'bird')
  106. I, [2009-03-24T14:46:17.748784 #68545] INFO -- : COMMIT
  107. I, [2009-03-24T14:46:17.749116 #68545] INFO -- : SELECT * FROM `animals` LIMIT 1
  108. I, [2009-03-24T14:46:17.749740 #68545] INFO -- : SELECT * FROM `animals` LIMIT 1
  109. I, [2009-03-24T14:46:17.750453 #68545] INFO -- : BEGIN
  110. I, [2009-03-24T14:46:17.750643 #68545] INFO -- : INSERT INTO `animals` (`name`, `kind`) VALUES ('sally', 'monkey2'), ('bob', 'bird2') ON DUPLICATE KEY UPDATE name=VALUES(name), kind=VALUES(kind)
  111. I, [2009-03-24T14:46:17.751519 #68545] INFO -- : COMMIT
  112. I, [2009-03-24T14:46:17.751817 #68545] INFO -- : BEGIN
  113. I, [2009-03-24T14:46:17.751982 #68545] INFO -- : INSERT INTO `animals` (`name`, `kind`) VALUES ('john', 'monkey2'), ('mark', 'elephant2') ON DUPLICATE KEY UPDATE name=VALUES(name), kind=VALUES(kind)
  114. I, [2009-03-24T14:46:17.752730 #68545] INFO -- : COMMIT
  115. I, [2009-03-24T14:46:17.752994 #68545] INFO -- : BEGIN
  116. I, [2009-03-24T14:46:17.753157 #68545] INFO -- : INSERT INTO `animals` (`name`, `kind`) VALUES ('fred', 'bird2') ON DUPLICATE KEY UPDATE name=VALUES(name), kind=VALUES(kind)
  117. I, [2009-03-24T14:46:17.753703 #68545] INFO -- : COMMIT
  118. I, [2009-03-24T14:46:17.754027 #68545] INFO -- : SELECT * FROM `animals` LIMIT 1
  119. I, [2009-03-24T14:46:17.754807 #68545] INFO -- : SELECT * FROM `animals` LIMIT 1
  120. I, [2009-03-24T14:46:17.755523 #68545] INFO -- : BEGIN
  121. I, [2009-03-24T14:46:17.755710 #68545] INFO -- : INSERT INTO `animals` (`name`, `kind`) VALUES ('sally', 'monkey2'), ('bob', 'bird2') ON DUPLICATE KEY UPDATE name=VALUES(name), kind=VALUES(kind)
  122. I, [2009-03-24T14:46:17.756490 #68545] INFO -- : COMMIT
  123. I, [2009-03-24T14:46:17.756786 #68545] INFO -- : BEGIN
  124. I, [2009-03-24T14:46:17.756995 #68545] INFO -- : INSERT INTO `animals` (`name`, `kind`) VALUES ('john', 'monkey2'), ('mark', 'elephant2') ON DUPLICATE KEY UPDATE name=VALUES(name), kind=VALUES(kind)
  125. I, [2009-03-24T14:46:17.757744 #68545] INFO -- : COMMIT
  126. I, [2009-03-24T14:46:17.758013 #68545] INFO -- : BEGIN
  127. I, [2009-03-24T14:46:17.758179 #68545] INFO -- : INSERT INTO `animals` (`name`, `kind`) VALUES ('fred', 'bird2') ON DUPLICATE KEY UPDATE name=VALUES(name), kind=VALUES(kind)
  128. I, [2009-03-24T14:46:17.758630 #68545] INFO -- : COMMIT
  129. I, [2009-03-24T14:46:17.758954 #68545] INFO -- : SELECT * FROM `animals` LIMIT 1
  130. I, [2009-03-24T14:46:17.759592 #68545] INFO -- : SELECT * FROM `animals` LIMIT 1
Add Comment
Please, Sign In to add comment