Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'pg'
- class Time
- def to_ms
- (self.to_f * 1000.0).to_i
- end
- end
- $newrevid = nil
- def dbConnect(host, user, password, dbname)
- puts "connecting to database: #{dbname}\n"
- PGconn.open :host => host, :user => user, :password => password, :dbname => dbname
- end
- def getTableFields(conn, tableName)
- descbuf = "SELECT a.attnum, a.attname, t.typname, a.attlen FROM pg_class c, pg_attribute a, pg_type t WHERE c.relname = '"
- descbuf += tableName
- descbuf += "' and a.attnum > 0 and a.attrelid = c.oid and a.atttypid = t.oid "
- descbuf += "ORDER BY attnum "
- res = conn.exec(descbuf)
- if res.nil?
- raise "No fields for table " + tableName + " found"
- end
- fields = r.map{|row| row.values[0]}
- if fields.empty?
- STDERR.puts "Table not found: #{tableName}\n"
- end
- res.clear
- fields
- end
- def populateAudTables(db, audTables)
- for tableIdx in 0 ... audTables.size
- query = "insert into " + audTables[tableIdx] + " ("
- fields = getTableFields(db, audTables[tableIdx])
- for fieldIdx in 0 ... fields.size
- query += fields[fieldIdx]
- if (fieldIdx != (fields.size-1))
- query += ", "
- end
- end
- query += ") "
- query += "select "
- for fieldIdx in 0 ... fields.size
- field = fields[fieldIdx]
- if (field == 'rev')
- query += $newrevid
- elsif (field == 'revtype')
- query += "0"
- else
- query += fields[fieldIdx]
- end
- if (fieldIdx != (fields.size-1))
- query += ", "
- end
- end
- query += " from "
- query += audTables[tableIdx].reverse.sub('_aud'.reverse, '').reverse
- puts query
- db.exec(query)
- end
- end
- def clearTables(db, audTables)
- for tableIdx in 0 ... audTables.size
- query = "delete from " + audTables[tableIdx];
- puts query
- db.exec(query)
- end
- end
- def populateRevInfoTable(db)
- query = "delete from revinfo"
- puts query
- db.exec(query)
- query = "select nextval ('hibernate_sequence')"
- puts query
- res = db.exec(query)
- if res == nil
- raise "Sequence " + hibernate_sequence + " not found"
- end
- $newrevid = '0'
- #$newrevid = res.getvalue(0, 0)
- #puts "New revid is " + $newrevid
- query = "INSERT INTO revinfo(rev, timestamp) VALUES($1::int, $2::bigint)"
- puts query
- db.exec query, [$newrevid, (Time.now.to_ms)]
- end
- def getAudTables(db, pattern)
- tablelist = []
- query = "SELECT relname FROM pg_class, pg_user WHERE usesysid = relowner "
- query += "AND ( relkind = 'r') AND relname !~ '^pg_' AND relname like '" + pattern + "' "
- query += "ORDER BY relname "
- res = db.exec(query)
- if res == nil
- return
- end
- nColumns = res.num_tuples
- if nColumns > 0
- for i in 0..res.num_tuples-1
- tablelist.push(res.getvalue(i, res.fnumber("relname")))
- end
- res.clear()
- else
- printf(STDERR, "Couldn't find any tables!\n")
- end
- return tablelist
- end
- if __FILE__ == $0
- # db = dbConnect('localhost', 'wdb', 'wdb', 'wdb-dev')
- db = dbConnect('localhost', 'wdb', 'wdb', 'wdbtest')
- audTables = getAudTables(db, "%_aud")
- clearTables(db, audTables)
- populateRevInfoTable(db)
- populateAudTables(db, audTables)
- end
Add Comment
Please, Sign In to add comment