Guest User

Untitled

a guest
Jan 14th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. require 'pg'
  2.  
  3. class Time
  4. def to_ms
  5. (self.to_f * 1000.0).to_i
  6. end
  7. end
  8.  
  9. $newrevid = nil
  10.  
  11. def dbConnect(host, user, password, dbname)
  12. puts "connecting to database: #{dbname}\n"
  13. PGconn.open :host => host, :user => user, :password => password, :dbname => dbname
  14. end
  15.  
  16. def getTableFields(conn, tableName)
  17. descbuf = "SELECT a.attnum, a.attname, t.typname, a.attlen FROM pg_class c, pg_attribute a, pg_type t WHERE c.relname = '"
  18. descbuf += tableName
  19. descbuf += "' and a.attnum > 0 and a.attrelid = c.oid and a.atttypid = t.oid "
  20. descbuf += "ORDER BY attnum "
  21.  
  22. res = conn.exec(descbuf)
  23. if res.nil?
  24. raise "No fields for table " + tableName + " found"
  25. end
  26.  
  27. fields = r.map{|row| row.values[0]}
  28. if fields.empty?
  29. STDERR.puts "Table not found: #{tableName}\n"
  30. end
  31. res.clear
  32. fields
  33. end
  34.  
  35.  
  36. def populateAudTables(db, audTables)
  37. for tableIdx in 0 ... audTables.size
  38. query = "insert into " + audTables[tableIdx] + " ("
  39.  
  40. fields = getTableFields(db, audTables[tableIdx])
  41. for fieldIdx in 0 ... fields.size
  42. query += fields[fieldIdx]
  43. if (fieldIdx != (fields.size-1))
  44. query += ", "
  45. end
  46. end
  47. query += ") "
  48. query += "select "
  49.  
  50. for fieldIdx in 0 ... fields.size
  51. field = fields[fieldIdx]
  52. if (field == 'rev')
  53. query += $newrevid
  54. elsif (field == 'revtype')
  55. query += "0"
  56. else
  57. query += fields[fieldIdx]
  58. end
  59. if (fieldIdx != (fields.size-1))
  60. query += ", "
  61. end
  62. end
  63. query += " from "
  64. query += audTables[tableIdx].reverse.sub('_aud'.reverse, '').reverse
  65.  
  66. puts query
  67. db.exec(query)
  68. end
  69. end
  70.  
  71. def clearTables(db, audTables)
  72. for tableIdx in 0 ... audTables.size
  73. query = "delete from " + audTables[tableIdx];
  74. puts query
  75. db.exec(query)
  76. end
  77. end
  78.  
  79. def populateRevInfoTable(db)
  80. query = "delete from revinfo"
  81. puts query
  82. db.exec(query)
  83.  
  84. query = "select nextval ('hibernate_sequence')"
  85. puts query
  86. res = db.exec(query)
  87. if res == nil
  88. raise "Sequence " + hibernate_sequence + " not found"
  89. end
  90. $newrevid = '0'
  91.  
  92. #$newrevid = res.getvalue(0, 0)
  93. #puts "New revid is " + $newrevid
  94.  
  95. query = "INSERT INTO revinfo(rev, timestamp) VALUES($1::int, $2::bigint)"
  96. puts query
  97. db.exec query, [$newrevid, (Time.now.to_ms)]
  98. end
  99.  
  100. def getAudTables(db, pattern)
  101. tablelist = []
  102.  
  103. query = "SELECT relname FROM pg_class, pg_user WHERE usesysid = relowner "
  104. query += "AND ( relkind = 'r') AND relname !~ '^pg_' AND relname like '" + pattern + "' "
  105. query += "ORDER BY relname "
  106.  
  107. res = db.exec(query)
  108. if res == nil
  109. return
  110. end
  111. nColumns = res.num_tuples
  112. if nColumns > 0
  113. for i in 0..res.num_tuples-1
  114. tablelist.push(res.getvalue(i, res.fnumber("relname")))
  115. end
  116. res.clear()
  117. else
  118. printf(STDERR, "Couldn't find any tables!\n")
  119. end
  120. return tablelist
  121. end
  122.  
  123. if __FILE__ == $0
  124. # db = dbConnect('localhost', 'wdb', 'wdb', 'wdb-dev')
  125. db = dbConnect('localhost', 'wdb', 'wdb', 'wdbtest')
  126.  
  127. audTables = getAudTables(db, "%_aud")
  128.  
  129. clearTables(db, audTables)
  130. populateRevInfoTable(db)
  131. populateAudTables(db, audTables)
  132.  
  133. end
Add Comment
Please, Sign In to add comment