from odb import *
import profiler
import socket
USER = 'root'
PASSWORD = ''
DATABASE = 'trans_data'
class TransStringTable(Table):
# access patterns:
# -> lookup individual entries by string_id
# -> lookup entry by string
def _defineRows(self):
self.d_addColumn("string_id", kInteger, primarykey=1, autoincrement=1)
# we can't actually index this... but we can index part with myisam
self.d_addColumn("string", kBigString, indexed=1)
## hmm, on second thought, storing this is in the database is kind
## of silly..., since it essentially could change with each run. It may
## not even be necessary to store this anywhere except in memory while
## trans is running
class TransLocTable(Table):
# access patterns:
# -> find "same" entry by filename/offset
# -> dump all locations for a version
# -> maybe: find all locations for a filename
def _defineRows(self):
self.d_addColumn("loc_id", kInteger, primarykey=1, autoincrement=1)
self.d_addColumn("string_id", kInteger, indexed=1)
self.d_addColumn("version", kInteger, default=0)
self.d_addColumn("filename", kVarString, 255, indexed=1)
self.d_addColumn("location", kVarString, 255)
# this can either be:
# ofs:x:y
# hdf:foo.bar.baz
class TransMapTable(Table):
# access patterns:
# -> dump all for a language
# -> lookup entry by string_id/lang
def _defineRows(self):
self.d_addColumn("string_id", kInteger, primarykey=1)
self.d_addColumn("lang", kFixedString, 2, primarykey=1)
self.d_addColumn("string", kBigString)
class DB(Database):
def __init__(self, db, debug=0):
self.db = db
self._cursor = None
self.debug = debug
self.addTable("strings", "nt_trans_strings", TransStringTable)
self.addTable("locs", "nt_trans_locs", TransLocTable)
self.addTable("maps", "nt_trans_maps", TransMapTable)
def defaultCursor(self):
# share one cursor for this db object!
if self._cursor is None:
if self.debug:
self._cursor = profiler.ProfilerCursor(self.db.cursor())
else:
self._cursor = self.db.cursor()
return self._cursor
def trans_connect(host = 'localhost', debug=0):
# try to optimize connection if on this machine
if host != 'localhost':
local_name = socket.gethostname()
if string.find(local_name, '.') == -1:
local_name = local_name + ".neotonic.com"
if local_name == host:
host = 'localhost'
if debug: p = profiler.Profiler("SQL", "Connect -- %s:trans" % (host))
db = MySQLdb.connect(host = host, user=USER, passwd = PASSWORD, db=DATABASE)
if debug: p.end()
retval = DB(db, debug=debug)
return retval