move most stuff from fpdb_db.py to Database.py and simplify db connections in fpdb_import
This commit is contained in:
parent
3cc5ed8024
commit
298de5dc15
|
@ -29,6 +29,8 @@ import traceback
|
|||
from datetime import datetime, date, time, timedelta
|
||||
from time import time, strftime
|
||||
import string
|
||||
import re
|
||||
import logging
|
||||
|
||||
# pyGTK modules
|
||||
|
||||
|
@ -45,6 +47,112 @@ class Database:
|
|||
PGSQL = 3
|
||||
SQLITE = 4
|
||||
|
||||
# Data Structures for index and foreign key creation
|
||||
# drop_code is an int with possible values: 0 - don't drop for bulk import
|
||||
# 1 - drop during bulk import
|
||||
# db differences:
|
||||
# - note that mysql automatically creates indexes on constrained columns when
|
||||
# foreign keys are created, while postgres does not. Hence the much longer list
|
||||
# of indexes is required for postgres.
|
||||
# all primary keys are left on all the time
|
||||
#
|
||||
# table column drop_code
|
||||
|
||||
indexes = [
|
||||
[ ] # no db with index 0
|
||||
, [ ] # no db with index 1
|
||||
, [ # indexes for mysql (list index 2)
|
||||
{'tab':'Players', 'col':'name', 'drop':0}
|
||||
, {'tab':'Hands', 'col':'siteHandNo', 'drop':0}
|
||||
, {'tab':'Tourneys', 'col':'siteTourneyNo', 'drop':0}
|
||||
]
|
||||
, [ # indexes for postgres (list index 3)
|
||||
{'tab':'Boardcards', 'col':'handId', 'drop':0}
|
||||
, {'tab':'Gametypes', 'col':'siteId', 'drop':0}
|
||||
, {'tab':'Hands', 'col':'gametypeId', 'drop':0} # mct 22/3/09
|
||||
, {'tab':'Hands', 'col':'siteHandNo', 'drop':0}
|
||||
, {'tab':'HandsActions', 'col':'handsPlayerId', 'drop':0}
|
||||
, {'tab':'HandsPlayers', 'col':'handId', 'drop':1}
|
||||
, {'tab':'HandsPlayers', 'col':'playerId', 'drop':1}
|
||||
, {'tab':'HandsPlayers', 'col':'tourneysPlayersId', 'drop':0}
|
||||
, {'tab':'HudCache', 'col':'gametypeId', 'drop':1}
|
||||
, {'tab':'HudCache', 'col':'playerId', 'drop':0}
|
||||
, {'tab':'HudCache', 'col':'tourneyTypeId', 'drop':0}
|
||||
, {'tab':'Players', 'col':'siteId', 'drop':1}
|
||||
, {'tab':'Players', 'col':'name', 'drop':0}
|
||||
, {'tab':'Tourneys', 'col':'tourneyTypeId', 'drop':1}
|
||||
, {'tab':'Tourneys', 'col':'siteTourneyNo', 'drop':0}
|
||||
, {'tab':'TourneysPlayers', 'col':'playerId', 'drop':0}
|
||||
, {'tab':'TourneysPlayers', 'col':'tourneyId', 'drop':0}
|
||||
, {'tab':'TourneyTypes', 'col':'siteId', 'drop':0}
|
||||
]
|
||||
, [ # indexes for sqlite (list index 4)
|
||||
]
|
||||
]
|
||||
|
||||
foreignKeys = [
|
||||
[ ] # no db with index 0
|
||||
, [ ] # no db with index 1
|
||||
, [ # foreign keys for mysql
|
||||
{'fktab':'Hands', 'fkcol':'gametypeId', 'rtab':'Gametypes', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsPlayers', 'fkcol':'handId', 'rtab':'Hands', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsPlayers', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsActions', 'fkcol':'handsPlayerId', 'rtab':'HandsPlayers', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HudCache', 'fkcol':'gametypeId', 'rtab':'Gametypes', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HudCache', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':0}
|
||||
, {'fktab':'HudCache', 'fkcol':'tourneyTypeId', 'rtab':'TourneyTypes', 'rcol':'id', 'drop':1}
|
||||
]
|
||||
, [ # foreign keys for postgres
|
||||
{'fktab':'Hands', 'fkcol':'gametypeId', 'rtab':'Gametypes', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsPlayers', 'fkcol':'handId', 'rtab':'Hands', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsPlayers', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsActions', 'fkcol':'handsPlayerId', 'rtab':'HandsPlayers', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HudCache', 'fkcol':'gametypeId', 'rtab':'Gametypes', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HudCache', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':0}
|
||||
, {'fktab':'HudCache', 'fkcol':'tourneyTypeId', 'rtab':'TourneyTypes', 'rcol':'id', 'drop':1}
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
# MySQL Notes:
|
||||
# "FOREIGN KEY (handId) REFERENCES Hands(id)" - requires index on Hands.id
|
||||
# - creates index handId on <thistable>.handId
|
||||
# alter table t drop foreign key fk
|
||||
# alter table t add foreign key (fkcol) references tab(rcol)
|
||||
# alter table t add constraint c foreign key (fkcol) references tab(rcol)
|
||||
# (fkcol is used for foreigh key name)
|
||||
|
||||
# mysql to list indexes:
|
||||
# SELECT table_name, index_name, non_unique, column_name
|
||||
# FROM INFORMATION_SCHEMA.STATISTICS
|
||||
# WHERE table_name = 'tbl_name'
|
||||
# AND table_schema = 'db_name'
|
||||
# ORDER BY table_name, index_name, seq_in_index
|
||||
#
|
||||
# ALTER TABLE Tourneys ADD INDEX siteTourneyNo(siteTourneyNo)
|
||||
# ALTER TABLE tab DROP INDEX idx
|
||||
|
||||
# mysql to list fks:
|
||||
# SELECT constraint_name, table_name, column_name, referenced_table_name, referenced_column_name
|
||||
# FROM information_schema.KEY_COLUMN_USAGE
|
||||
# WHERE REFERENCED_TABLE_SCHEMA = (your schema name here)
|
||||
# AND REFERENCED_TABLE_NAME is not null
|
||||
# ORDER BY TABLE_NAME, COLUMN_NAME;
|
||||
|
||||
# this may indicate missing object
|
||||
# _mysql_exceptions.OperationalError: (1025, "Error on rename of '.\\fpdb\\hands' to '.\\fpdb\\#sql2-7f0-1b' (errno: 152)")
|
||||
|
||||
|
||||
# PG notes:
|
||||
|
||||
# To add a foreign key constraint to a table:
|
||||
# ALTER TABLE tab ADD CONSTRAINT c FOREIGN KEY (col) REFERENCES t2(col2) MATCH FULL;
|
||||
# ALTER TABLE tab DROP CONSTRAINT zipchk
|
||||
#
|
||||
# Note: index names must be unique across a schema
|
||||
# CREATE INDEX idx ON tab(col)
|
||||
# DROP INDEX idx
|
||||
|
||||
def __init__(self, c, db_name = None, game = None, sql = None): # db_name and game not used any more
|
||||
print "\ncreating Database instance, sql =", sql
|
||||
self.fdb = fpdb_db.fpdb_db() # sets self.fdb.db self.fdb.cursor and self.fdb.sql
|
||||
|
@ -123,6 +231,7 @@ class Database:
|
|||
self.saveActions = False if self.import_options['saveActions'] == False else True
|
||||
|
||||
self.connection.rollback() # make sure any locks taken so far are released
|
||||
#end def __init__
|
||||
|
||||
# could be used by hud to change hud style
|
||||
def set_hud_style(self, style):
|
||||
|
@ -335,6 +444,12 @@ class Database:
|
|||
return row[0]
|
||||
else:
|
||||
return None
|
||||
|
||||
def get_site_id(self, site):
|
||||
c = self.get_cursor()
|
||||
c.execute(self.sql.query['getSiteId'], (site,))
|
||||
result = c.fetchall()
|
||||
return result
|
||||
|
||||
def get_last_insert_id(self):
|
||||
try:
|
||||
|
@ -470,14 +585,358 @@ class Database:
|
|||
return hands_id
|
||||
#end def tourney_stud
|
||||
|
||||
def prepareBulkImport(self):
|
||||
"""Drop some indexes/foreign keys to prepare for bulk import.
|
||||
Currently keeping the standalone indexes as needed to import quickly"""
|
||||
stime = time()
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
self.get_cursor().execute("SET foreign_key_checks=0")
|
||||
self.get_cursor().execute("SET autocommit=0")
|
||||
return
|
||||
if self.backend == self.PGSQL:
|
||||
self.connection.set_isolation_level(0) # allow table/index operations to work
|
||||
for fk in self.foreignKeys[self.backend]:
|
||||
if fk['drop'] == 1:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
c = self.get_cursor()
|
||||
c.execute("SELECT constraint_name " +
|
||||
"FROM information_schema.KEY_COLUMN_USAGE " +
|
||||
#"WHERE REFERENCED_TABLE_SCHEMA = 'fpdb'
|
||||
"WHERE 1=1 " +
|
||||
"AND table_name = %s AND column_name = %s " +
|
||||
"AND referenced_table_name = %s " +
|
||||
"AND referenced_column_name = %s ",
|
||||
(fk['fktab'], fk['fkcol'], fk['rtab'], fk['rcol']) )
|
||||
cons = c.fetchone()
|
||||
#print "preparebulk: cons=", cons
|
||||
if cons:
|
||||
print "dropping mysql fk", cons[0], fk['fktab'], fk['fkcol']
|
||||
try:
|
||||
c.execute("alter table " + fk['fktab'] + " drop foreign key " + cons[0])
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
# DON'T FORGET TO RECREATE THEM!!
|
||||
print "dropping pg fk", fk['fktab'], fk['fkcol']
|
||||
try:
|
||||
# try to lock table to see if index drop will work:
|
||||
# hmmm, tested by commenting out rollback in grapher. lock seems to work but
|
||||
# then drop still hangs :-( does work in some tests though??
|
||||
# will leave code here for now pending further tests/enhancement ...
|
||||
c.execute( "lock table %s in exclusive mode nowait" % (fk['fktab'],) )
|
||||
#print "after lock, status:", c.statusmessage
|
||||
#print "alter table %s drop constraint %s_%s_fkey" % (fk['fktab'], fk['fktab'], fk['fkcol'])
|
||||
try:
|
||||
c.execute("alter table %s drop constraint %s_%s_fkey" % (fk['fktab'], fk['fktab'], fk['fkcol']))
|
||||
print "dropped pg fk pg fk %s_%s_fkey, continuing ..." % (fk['fktab'], fk['fkcol'])
|
||||
except:
|
||||
if "does not exist" not in str(sys.exc_value):
|
||||
print "warning: drop pg fk %s_%s_fkey failed: %s, continuing ..." \
|
||||
% (fk['fktab'], fk['fkcol'], str(sys.exc_value).rstrip('\n') )
|
||||
except:
|
||||
print "warning: constraint %s_%s_fkey not dropped: %s, continuing ..." \
|
||||
% (fk['fktab'],fk['fkcol'], str(sys.exc_value).rstrip('\n'))
|
||||
else:
|
||||
print "Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
|
||||
for idx in indexes[self.backend]:
|
||||
if idx['drop'] == 1:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
print "dropping mysql index ", idx['tab'], idx['col']
|
||||
try:
|
||||
# apparently nowait is not implemented in mysql so this just hands if there are locks
|
||||
# preventing the index drop :-(
|
||||
c.execute( "alter table %s drop index %s", (idx['tab'],idx['col']) )
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
# DON'T FORGET TO RECREATE THEM!!
|
||||
print "dropping pg index ", idx['tab'], idx['col']
|
||||
try:
|
||||
# try to lock table to see if index drop will work:
|
||||
c.execute( "lock table %s in exclusive mode nowait" % (idx['tab'],) )
|
||||
#print "after lock, status:", c.statusmessage
|
||||
try:
|
||||
# table locked ok so index drop should work:
|
||||
#print "drop index %s_%s_idx" % (idx['tab'],idx['col'])
|
||||
c.execute( "drop index if exists %s_%s_idx" % (idx['tab'],idx['col']) )
|
||||
#print "dropped pg index ", idx['tab'], idx['col']
|
||||
except:
|
||||
if "does not exist" not in str(sys.exc_value):
|
||||
print "warning: drop index %s_%s_idx failed: %s, continuing ..." \
|
||||
% (idx['tab'],idx['col'], str(sys.exc_value).rstrip('\n'))
|
||||
except:
|
||||
print "warning: index %s_%s_idx not dropped %s, continuing ..." \
|
||||
% (idx['tab'],idx['col'], str(sys.exc_value).rstrip('\n'))
|
||||
else:
|
||||
print "Error: Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
|
||||
if self.backend == self.PGSQL:
|
||||
self.connection.set_isolation_level(1) # go back to normal isolation level
|
||||
self.commit() # seems to clear up errors if there were any in postgres
|
||||
ptime = time() - stime
|
||||
print "prepare import took", ptime, "seconds"
|
||||
#end def prepareBulkImport
|
||||
|
||||
def afterBulkImport(self):
|
||||
"""Re-create any dropped indexes/foreign keys after bulk import"""
|
||||
stime = time()
|
||||
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
c = self.get_cursor()
|
||||
c.execute("SET foreign_key_checks=1")
|
||||
c.execute("SET autocommit=1")
|
||||
return
|
||||
|
||||
if self.backend == self.PGSQL:
|
||||
self.connection.set_isolation_level(0) # allow table/index operations to work
|
||||
for fk in self.foreignKeys[self.backend]:
|
||||
if fk['drop'] == 1:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
c.execute("SELECT constraint_name " +
|
||||
"FROM information_schema.KEY_COLUMN_USAGE " +
|
||||
#"WHERE REFERENCED_TABLE_SCHEMA = 'fpdb'
|
||||
"WHERE 1=1 " +
|
||||
"AND table_name = %s AND column_name = %s " +
|
||||
"AND referenced_table_name = %s " +
|
||||
"AND referenced_column_name = %s ",
|
||||
(fk['fktab'], fk['fkcol'], fk['rtab'], fk['rcol']) )
|
||||
cons = c.fetchone()
|
||||
#print "afterbulk: cons=", cons
|
||||
if cons:
|
||||
pass
|
||||
else:
|
||||
print "creating fk ", fk['fktab'], fk['fkcol'], "->", fk['rtab'], fk['rcol']
|
||||
try:
|
||||
c.execute("alter table " + fk['fktab'] + " add foreign key ("
|
||||
+ fk['fkcol'] + ") references " + fk['rtab'] + "("
|
||||
+ fk['rcol'] + ")")
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
print "creating fk ", fk['fktab'], fk['fkcol'], "->", fk['rtab'], fk['rcol']
|
||||
try:
|
||||
c.execute("alter table " + fk['fktab'] + " add constraint "
|
||||
+ fk['fktab'] + '_' + fk['fkcol'] + '_fkey'
|
||||
+ " foreign key (" + fk['fkcol']
|
||||
+ ") references " + fk['rtab'] + "(" + fk['rcol'] + ")")
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
print "Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
|
||||
for idx in indexes[self.backend]:
|
||||
if idx['drop'] == 1:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
print "creating mysql index ", idx['tab'], idx['col']
|
||||
try:
|
||||
c.execute( "alter table %s add index %s(%s)"
|
||||
, (idx['tab'],idx['col'],idx['col']) )
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
# pass
|
||||
# mod to use tab_col for index name?
|
||||
print "creating pg index ", idx['tab'], idx['col']
|
||||
try:
|
||||
print "create index %s_%s_idx on %s(%s)" % (idx['tab'], idx['col'], idx['tab'], idx['col'])
|
||||
c.execute( "create index %s_%s_idx on %s(%s)"
|
||||
% (idx['tab'], idx['col'], idx['tab'], idx['col']) )
|
||||
except:
|
||||
print " ERROR! :-("
|
||||
pass
|
||||
else:
|
||||
print "Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
|
||||
if self.backend == self.PGSQL:
|
||||
self.connection.set_isolation_level(1) # go back to normal isolation level
|
||||
self.commit() # seems to clear up errors if there were any in postgres
|
||||
atime = time() - stime
|
||||
print "After import took", atime, "seconds"
|
||||
#end def afterBulkImport
|
||||
|
||||
def drop_referential_integrity(self):
|
||||
"""Update all tables to remove foreign keys"""
|
||||
|
||||
c = self.get_cursor()
|
||||
c.execute(self.sql.query['list_tables'])
|
||||
result = c.fetchall()
|
||||
|
||||
for i in range(len(result)):
|
||||
c.execute("SHOW CREATE TABLE " + result[i][0])
|
||||
inner = c.fetchall()
|
||||
|
||||
for j in range(len(inner)):
|
||||
# result[i][0] - Table name
|
||||
# result[i][1] - CREATE TABLE parameters
|
||||
#Searching for CONSTRAINT `tablename_ibfk_1`
|
||||
for m in re.finditer('(ibfk_[0-9]+)', inner[j][1]):
|
||||
key = "`" + inner[j][0] + "_" + m.group() + "`"
|
||||
c.execute("ALTER TABLE " + inner[j][0] + " DROP FOREIGN KEY " + key)
|
||||
self.commit()
|
||||
#end drop_referential_inegrity
|
||||
|
||||
def recreate_tables(self):
|
||||
"""(Re-)creates the tables of the current DB"""
|
||||
|
||||
self.drop_tables()
|
||||
self.create_tables()
|
||||
self.createAllIndexes()
|
||||
self.commit()
|
||||
print "Finished recreating tables"
|
||||
#end def recreate_tables
|
||||
|
||||
def create_tables(self):
|
||||
#todo: should detect and fail gracefully if tables already exist.
|
||||
try:
|
||||
logging.debug(self.sql.query['createSettingsTable'])
|
||||
c = self.get_cursor()
|
||||
c.execute(self.sql.query['createSettingsTable'])
|
||||
logging.debug(self.sql.query['createSitesTable'])
|
||||
c.execute(self.sql.query['createSitesTable'])
|
||||
c.execute(self.sql.query['createGametypesTable'])
|
||||
c.execute(self.sql.query['createPlayersTable'])
|
||||
c.execute(self.sql.query['createAutoratesTable'])
|
||||
c.execute(self.sql.query['createHandsTable'])
|
||||
c.execute(self.sql.query['createTourneyTypesTable'])
|
||||
c.execute(self.sql.query['createTourneysTable'])
|
||||
c.execute(self.sql.query['createTourneysPlayersTable'])
|
||||
c.execute(self.sql.query['createHandsPlayersTable'])
|
||||
c.execute(self.sql.query['createHandsActionsTable'])
|
||||
c.execute(self.sql.query['createHudCacheTable'])
|
||||
#c.execute(self.sql.query['addTourneyIndex'])
|
||||
#c.execute(self.sql.query['addHandsIndex'])
|
||||
#c.execute(self.sql.query['addPlayersIndex'])
|
||||
self.fillDefaultData()
|
||||
self.commit()
|
||||
except:
|
||||
print "Error creating tables: ", str(sys.exc_value)
|
||||
self.rollback()
|
||||
raise fpdb_simple.FpdbError( "Error creating tables " + str(sys.exc_value) )
|
||||
#end def disconnect
|
||||
|
||||
def drop_tables(self):
|
||||
"""Drops the fpdb tables from the current db"""
|
||||
|
||||
try:
|
||||
if(self.get_backend_name() == 'MySQL InnoDB'):
|
||||
#Databases with FOREIGN KEY support need this switched of before you can drop tables
|
||||
self.drop_referential_integrity()
|
||||
|
||||
# Query the DB to see what tables exist
|
||||
c = self.get_cursor()
|
||||
c.execute(self.sql.query['list_tables'])
|
||||
for table in c:
|
||||
c.execute(self.sql.query['drop_table'] + table[0])
|
||||
elif(self.get_backend_name() == 'PostgreSQL'):
|
||||
self.commit()# I have no idea why this makes the query work--REB 07OCT2008
|
||||
c.execute(self.sql.query['list_tables'])
|
||||
tables = c.fetchall()
|
||||
for table in tables:
|
||||
c.execute(self.sql.query['drop_table'] + table[0] + ' cascade')
|
||||
elif(self.get_backend_name() == 'SQLite'):
|
||||
c.execute(self.sql.query['list_tables'])
|
||||
for table in c.fetchall():
|
||||
logging.debug(self.sql.query['drop_table'] + table[0])
|
||||
c.execute(self.sql.query['drop_table'] + table[0])
|
||||
|
||||
self.commit()
|
||||
except:
|
||||
print "Error dropping tables: " + str(sys.exc_value)
|
||||
raise fpdb_simple.FpdbError( "Error dropping tables " + str(sys.exc_value) )
|
||||
#end def drop_tables
|
||||
|
||||
def createAllIndexes(self):
|
||||
"""Create new indexes"""
|
||||
|
||||
try:
|
||||
if self.backend == self.PGSQL:
|
||||
self.connection.set_isolation_level(0) # allow table/index operations to work
|
||||
for idx in self.indexes[self.backend]:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
print "creating mysql index ", idx['tab'], idx['col']
|
||||
try:
|
||||
self.get_cursor().execute( "alter table %s add index %s(%s)"
|
||||
, (idx['tab'],idx['col'],idx['col']) )
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
# mod to use tab_col for index name?
|
||||
print "creating pg index ", idx['tab'], idx['col']
|
||||
try:
|
||||
print "create index %s_%s_idx on %s(%s)" % (idx['tab'], idx['col'], idx['tab'], idx['col'])
|
||||
self.get_cursor().execute( "create index %s_%s_idx on %s(%s)"
|
||||
% (idx['tab'], idx['col'], idx['tab'], idx['col']) )
|
||||
except:
|
||||
print " ERROR! :-("
|
||||
pass
|
||||
else:
|
||||
print "Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
if self.backend == self.PGSQL:
|
||||
self.connection.set_isolation_level(1) # go back to normal isolation level
|
||||
except:
|
||||
print "Error creating indexes: " + str(sys.exc_value)
|
||||
raise fpdb_simple.FpdbError( "Error creating indexes " + str(sys.exc_value) )
|
||||
#end def createAllIndexes
|
||||
|
||||
def dropAllIndexes(self):
|
||||
"""Drop all standalone indexes (i.e. not including primary keys or foreign keys)
|
||||
using list of indexes in indexes data structure"""
|
||||
# maybe upgrade to use data dictionary?? (but take care to exclude PK and FK)
|
||||
if self.backend == self.PGSQL:
|
||||
self.connection.set_isolation_level(0) # allow table/index operations to work
|
||||
for idx in self.indexes[self.backend]:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
print "dropping mysql index ", idx['tab'], idx['col']
|
||||
try:
|
||||
self.get_cursor().execute( "alter table %s drop index %s"
|
||||
, (idx['tab'],idx['col']) )
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
print "dropping pg index ", idx['tab'], idx['col']
|
||||
# mod to use tab_col for index name?
|
||||
try:
|
||||
self.get_cursor().execute( "drop index %s_%s_idx"
|
||||
% (idx['tab'],idx['col']) )
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
print "Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
if self.backend == self.PGSQL:
|
||||
self.connection.set_isolation_level(1) # go back to normal isolation level
|
||||
#end def dropAllIndexes
|
||||
|
||||
def fillDefaultData(self):
|
||||
c = self.get_cursor()
|
||||
c.execute("INSERT INTO Settings (version) VALUES (118);")
|
||||
c.execute("INSERT INTO Sites (name,currency) VALUES ('Full Tilt Poker', 'USD')")
|
||||
c.execute("INSERT INTO Sites (name,currency) VALUES ('PokerStars', 'USD')")
|
||||
c.execute("INSERT INTO Sites (name,currency) VALUES ('Everleaf', 'USD')")
|
||||
c.execute("INSERT INTO Sites (name,currency) VALUES ('Win2day', 'USD')")
|
||||
c.execute("INSERT INTO TourneyTypes VALUES (DEFAULT, 1, 0, 0, 0, False);")
|
||||
#c.execute("""INSERT INTO TourneyTypes
|
||||
# (siteId,buyin,fee,knockout,rebuyOrAddon) VALUES
|
||||
# (1,0,0,0,?)""",(False,) )
|
||||
#end def fillDefaultData
|
||||
|
||||
def rebuild_hudcache(self):
|
||||
"""clears hudcache and rebuilds from the individual handsplayers records"""
|
||||
|
||||
stime = time()
|
||||
self.connection.cursor().execute(self.sql.query['clearHudCache'])
|
||||
self.connection.cursor().execute(self.sql.query['rebuildHudCache'])
|
||||
self.commit()
|
||||
print "Rebuild hudcache took %.1f seconds" % (time() - stime,)
|
||||
try:
|
||||
stime = time()
|
||||
self.connection.cursor().execute(self.sql.query['clearHudCache'])
|
||||
self.connection.cursor().execute(self.sql.query['rebuildHudCache'])
|
||||
self.commit()
|
||||
print "Rebuild hudcache took %.1f seconds" % (time() - stime,)
|
||||
except:
|
||||
print "Error rebuilding hudcache:", str(sys.exc_value)
|
||||
#end def rebuild_hudcache
|
||||
|
||||
|
||||
|
|
|
@ -30,849 +30,6 @@ class FpdbSQLQueries:
|
|||
self.query = {}
|
||||
self.dbname = db
|
||||
|
||||
################################
|
||||
# List tables
|
||||
################################
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['list_tables'] = """SHOW TABLES"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['list_tables'] = """SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['list_tables'] = """SELECT name FROM sqlite_master
|
||||
WHERE type='table'
|
||||
ORDER BY name;"""
|
||||
|
||||
##################################################################
|
||||
# Drop Tables - MySQL, PostgreSQL and SQLite all share same syntax
|
||||
##################################################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB') or (self.dbname == 'PostgreSQL') or (self.dbname == 'SQLite'):
|
||||
self.query['drop_table'] = """DROP TABLE IF EXISTS """
|
||||
|
||||
|
||||
################################
|
||||
# Create Tables
|
||||
################################
|
||||
|
||||
################################
|
||||
# Create Settings
|
||||
################################
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createSettingsTable'] = """CREATE TABLE Settings (
|
||||
version SMALLINT NOT NULL)
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createSettingsTable'] = """CREATE TABLE Settings (version SMALLINT)"""
|
||||
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createSettingsTable'] = """CREATE TABLE Settings
|
||||
(version INTEGER) """
|
||||
|
||||
|
||||
################################
|
||||
# Create Sites
|
||||
################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createSitesTable'] = """CREATE TABLE Sites (
|
||||
id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
name varchar(32) NOT NULL,
|
||||
currency char(3) NOT NULL)
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createSitesTable'] = """CREATE TABLE Sites (
|
||||
id SERIAL, PRIMARY KEY (id),
|
||||
name varchar(32),
|
||||
currency char(3))"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createSitesTable'] = """CREATE TABLE Sites (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
currency TEXT NOT NULL)"""
|
||||
|
||||
|
||||
################################
|
||||
# Create Gametypes
|
||||
################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createGametypesTable'] = """CREATE TABLE Gametypes (
|
||||
id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
type char(4) NOT NULL,
|
||||
base char(4) NOT NULL,
|
||||
category varchar(9) NOT NULL,
|
||||
limitType char(2) NOT NULL,
|
||||
hiLo char(1) NOT NULL,
|
||||
smallBlind int,
|
||||
bigBlind int,
|
||||
smallBet int NOT NULL,
|
||||
bigBet int NOT NULL)
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createGametypesTable'] = """CREATE TABLE Gametypes (
|
||||
id SERIAL, PRIMARY KEY (id),
|
||||
siteId INTEGER, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
type char(4),
|
||||
base char(4),
|
||||
category varchar(9),
|
||||
limitType char(2),
|
||||
hiLo char(1),
|
||||
smallBlind int,
|
||||
bigBlind int,
|
||||
smallBet int,
|
||||
bigBet int)"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createGametypesTable'] = """CREATE TABLE GameTypes (
|
||||
id INTEGER PRIMARY KEY,
|
||||
siteId INTEGER,
|
||||
type TEXT,
|
||||
base TEXT,
|
||||
category TEXT,
|
||||
limitType TEXT,
|
||||
hiLo TEXT,
|
||||
smallBlind INTEGER,
|
||||
bigBlind INTEGER,
|
||||
smallBet INTEGER,
|
||||
bigBet INTEGER,
|
||||
FOREIGN KEY(siteId) REFERENCES Sites(id) ON DELETE CASCADE)"""
|
||||
|
||||
|
||||
################################
|
||||
# Create Players
|
||||
################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createPlayersTable'] = """CREATE TABLE Players (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
name VARCHAR(32) CHARACTER SET utf8 NOT NULL,
|
||||
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
comment text,
|
||||
commentTs DATETIME)
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createPlayersTable'] = """CREATE TABLE Players (
|
||||
id SERIAL, PRIMARY KEY (id),
|
||||
name VARCHAR(32),
|
||||
siteId INTEGER, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
comment text,
|
||||
commentTs timestamp without time zone)"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createPlayersTable'] = """CREATE TABLE Players (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT,
|
||||
siteId INTEGER,
|
||||
comment TEXT,
|
||||
commentTs BLOB,
|
||||
FOREIGN KEY(siteId) REFERENCES Sites(id) ON DELETE CASCADE)"""
|
||||
|
||||
|
||||
################################
|
||||
# Create Autorates
|
||||
################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createAutoratesTable'] = """CREATE TABLE Autorates (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
description varchar(50) NOT NULL,
|
||||
shortDesc char(8) NOT NULL,
|
||||
ratingTime DATETIME NOT NULL,
|
||||
handCount int NOT NULL)
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createAutoratesTable'] = """CREATE TABLE Autorates (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
gametypeId INT, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
description varchar(50),
|
||||
shortDesc char(8),
|
||||
ratingTime timestamp without time zone,
|
||||
handCount int)"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createAutoratesTable'] = """ """
|
||||
|
||||
|
||||
################################
|
||||
# Create Hands
|
||||
################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createHandsTable'] = """CREATE TABLE Hands (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
tableName VARCHAR(20) NOT NULL,
|
||||
siteHandNo BIGINT NOT NULL,
|
||||
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
handStart DATETIME NOT NULL,
|
||||
importTime DATETIME NOT NULL,
|
||||
seats TINYINT NOT NULL,
|
||||
maxSeats TINYINT NOT NULL,
|
||||
boardcard1 smallint, /* 0=none, 1-13=2-Ah 14-26=2-Ad 27-39=2-Ac 40-52=2-As */
|
||||
boardcard2 smallint,
|
||||
boardcard3 smallint,
|
||||
boardcard4 smallint,
|
||||
boardcard5 smallint,
|
||||
texture smallint,
|
||||
playersVpi SMALLINT NOT NULL, /* num of players vpi */
|
||||
playersAtStreet1 SMALLINT NOT NULL, /* num of players seeing flop/street4 */
|
||||
playersAtStreet2 SMALLINT NOT NULL,
|
||||
playersAtStreet3 SMALLINT NOT NULL,
|
||||
playersAtStreet4 SMALLINT NOT NULL,
|
||||
playersAtShowdown SMALLINT NOT NULL,
|
||||
street0Raises TINYINT NOT NULL, /* num small bets paid to see flop/street4, including blind */
|
||||
street1Raises TINYINT NOT NULL, /* num small bets paid to see turn/street5 */
|
||||
street2Raises TINYINT NOT NULL, /* num big bets paid to see river/street6 */
|
||||
street3Raises TINYINT NOT NULL, /* num big bets paid to see sd/street7 */
|
||||
street4Raises TINYINT NOT NULL, /* num big bets paid to see showdown */
|
||||
street1Pot INT, /* pot size at flop/street4 */
|
||||
street2Pot INT, /* pot size at turn/street5 */
|
||||
street3Pot INT, /* pot size at river/street6 */
|
||||
street4Pot INT, /* pot size at sd/street7 */
|
||||
showdownPot INT, /* pot size at sd/street7 */
|
||||
comment TEXT,
|
||||
commentTs DATETIME)
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createHandsTable'] = """CREATE TABLE Hands (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
tableName VARCHAR(20) NOT NULL,
|
||||
siteHandNo BIGINT NOT NULL,
|
||||
gametypeId INT NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
handStart timestamp without time zone NOT NULL,
|
||||
importTime timestamp without time zone NOT NULL,
|
||||
seats SMALLINT NOT NULL,
|
||||
maxSeats SMALLINT NOT NULL,
|
||||
boardcard1 smallint, /* 0=none, 1-13=2-Ah 14-26=2-Ad 27-39=2-Ac 40-52=2-As */
|
||||
boardcard2 smallint,
|
||||
boardcard3 smallint,
|
||||
boardcard4 smallint,
|
||||
boardcard5 smallint,
|
||||
texture smallint,
|
||||
playersVpi SMALLINT NOT NULL, /* num of players vpi */
|
||||
playersAtStreet1 SMALLINT NOT NULL, /* num of players seeing flop/street4 */
|
||||
playersAtStreet2 SMALLINT NOT NULL,
|
||||
playersAtStreet3 SMALLINT NOT NULL,
|
||||
playersAtStreet4 SMALLINT NOT NULL,
|
||||
playersAtShowdown SMALLINT NOT NULL,
|
||||
street0Raises SMALLINT NOT NULL, /* num small bets paid to see flop/street4, including blind */
|
||||
street1Raises SMALLINT NOT NULL, /* num small bets paid to see turn/street5 */
|
||||
street2Raises SMALLINT NOT NULL, /* num big bets paid to see river/street6 */
|
||||
street3Raises SMALLINT NOT NULL, /* num big bets paid to see sd/street7 */
|
||||
street4Raises SMALLINT NOT NULL, /* num big bets paid to see showdown */
|
||||
street1Pot INT, /* pot size at flop/street4 */
|
||||
street2Pot INT, /* pot size at turn/street5 */
|
||||
street3Pot INT, /* pot size at river/street6 */
|
||||
street4Pot INT, /* pot size at sd/street7 */
|
||||
showdownPot INT, /* pot size at sd/street7 */
|
||||
comment TEXT,
|
||||
commentTs timestamp without time zone)"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createHandsTable'] = """CREATE TABLE Hands (
|
||||
id INTEGER PRIMARY KEY,
|
||||
tableName TEXT(20),
|
||||
siteHandNo INTEGER,
|
||||
gametypeId INTEGER,
|
||||
handStart BLOB,
|
||||
importTime BLOB,
|
||||
seats INTEGER,
|
||||
maxSeats INTEGER,
|
||||
comment TEXT,
|
||||
commentTs BLOB,
|
||||
FOREIGN KEY(gametypeId) REFERENCES Gametypes(id) ON DELETE CASCADE)"""
|
||||
|
||||
|
||||
################################
|
||||
# Create TourneyTypes
|
||||
################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createTourneyTypesTable'] = """CREATE TABLE TourneyTypes (
|
||||
id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
buyin INT NOT NULL,
|
||||
fee INT NOT NULL,
|
||||
knockout INT NOT NULL,
|
||||
rebuyOrAddon BOOLEAN NOT NULL)
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createTourneyTypesTable'] = """CREATE TABLE TourneyTypes (
|
||||
id SERIAL, PRIMARY KEY (id),
|
||||
siteId INT, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
buyin INT,
|
||||
fee INT,
|
||||
knockout INT,
|
||||
rebuyOrAddon BOOLEAN)"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createTourneyTypesTable'] = """ """
|
||||
|
||||
|
||||
################################
|
||||
# Create Tourneys
|
||||
################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createTourneysTable'] = """CREATE TABLE Tourneys (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
tourneyTypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
siteTourneyNo BIGINT NOT NULL,
|
||||
entries INT NOT NULL,
|
||||
prizepool INT NOT NULL,
|
||||
startTime DATETIME NOT NULL,
|
||||
comment TEXT,
|
||||
commentTs DATETIME)
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createTourneysTable'] = """CREATE TABLE Tourneys (
|
||||
id SERIAL, PRIMARY KEY (id),
|
||||
tourneyTypeId INT, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
siteTourneyNo BIGINT,
|
||||
entries INT,
|
||||
prizepool INT,
|
||||
startTime timestamp without time zone,
|
||||
comment TEXT,
|
||||
commentTs timestamp without time zone)"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createTourneysTable'] = """CREATE TABLE TourneyTypes (
|
||||
id INTEGER PRIMARY KEY,
|
||||
siteId INTEGER,
|
||||
buyin INTEGER,
|
||||
fee INTEGER,
|
||||
knockout INTEGER,
|
||||
rebuyOrAddon BOOL,
|
||||
FOREIGN KEY(siteId) REFERENCES Sites(id) ON DELETE CASCADE)"""
|
||||
|
||||
################################
|
||||
# Create HandsPlayers
|
||||
################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createHandsPlayersTable'] = """CREATE TABLE HandsPlayers (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
handId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handId) REFERENCES Hands(id),
|
||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
startCash INT NOT NULL,
|
||||
position CHAR(1),
|
||||
seatNo SMALLINT NOT NULL,
|
||||
|
||||
card1 smallint NOT NULL, /* 0=none, 1-13=2-Ah 14-26=2-Ad 27-39=2-Ac 40-52=2-As */
|
||||
card2 smallint NOT NULL,
|
||||
card3 smallint,
|
||||
card4 smallint,
|
||||
card5 smallint,
|
||||
card6 smallint,
|
||||
card7 smallint,
|
||||
startCards smallint,
|
||||
|
||||
ante INT,
|
||||
winnings int NOT NULL,
|
||||
rake int NOT NULL,
|
||||
totalProfit INT NOT NULL,
|
||||
comment text,
|
||||
commentTs DATETIME,
|
||||
tourneysPlayersId BIGINT UNSIGNED,
|
||||
tourneyTypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
|
||||
wonWhenSeenStreet1 FLOAT NOT NULL,
|
||||
wonWhenSeenStreet2 FLOAT,
|
||||
wonWhenSeenStreet3 FLOAT,
|
||||
wonWhenSeenStreet4 FLOAT,
|
||||
wonAtSD FLOAT NOT NULL,
|
||||
|
||||
street0VPI BOOLEAN NOT NULL,
|
||||
street0Aggr BOOLEAN NOT NULL,
|
||||
street0_3BChance BOOLEAN NOT NULL,
|
||||
street0_3BDone BOOLEAN NOT NULL,
|
||||
street0_4BChance BOOLEAN,
|
||||
street0_4BDone BOOLEAN,
|
||||
other3BStreet0 BOOLEAN,
|
||||
other4BStreet0 BOOLEAN,
|
||||
|
||||
street1Seen BOOLEAN NOT NULL,
|
||||
street2Seen BOOLEAN NOT NULL,
|
||||
street3Seen BOOLEAN NOT NULL,
|
||||
street4Seen BOOLEAN NOT NULL,
|
||||
sawShowdown BOOLEAN NOT NULL,
|
||||
|
||||
street1Aggr BOOLEAN NOT NULL,
|
||||
street2Aggr BOOLEAN NOT NULL,
|
||||
street3Aggr BOOLEAN NOT NULL,
|
||||
street4Aggr BOOLEAN NOT NULL,
|
||||
|
||||
otherRaisedStreet0 BOOLEAN,
|
||||
otherRaisedStreet1 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet2 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet3 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet4 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet0 BOOLEAN,
|
||||
foldToOtherRaisedStreet1 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet2 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet3 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet4 BOOLEAN NOT NULL,
|
||||
|
||||
stealAttemptChance BOOLEAN NOT NULL,
|
||||
stealAttempted BOOLEAN NOT NULL,
|
||||
foldBbToStealChance BOOLEAN NOT NULL,
|
||||
foldedBbToSteal BOOLEAN NOT NULL,
|
||||
foldSbToStealChance BOOLEAN NOT NULL,
|
||||
foldedSbToSteal BOOLEAN NOT NULL,
|
||||
|
||||
street1CBChance BOOLEAN NOT NULL,
|
||||
street1CBDone BOOLEAN NOT NULL,
|
||||
street2CBChance BOOLEAN NOT NULL,
|
||||
street2CBDone BOOLEAN NOT NULL,
|
||||
street3CBChance BOOLEAN NOT NULL,
|
||||
street3CBDone BOOLEAN NOT NULL,
|
||||
street4CBChance BOOLEAN NOT NULL,
|
||||
street4CBDone BOOLEAN NOT NULL,
|
||||
|
||||
foldToStreet1CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet1CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet2CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet2CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet3CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet3CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet4CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet4CBDone BOOLEAN NOT NULL,
|
||||
|
||||
street1CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street1CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street2CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street2CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street3CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street3CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street4CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street4CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
|
||||
street0Calls TINYINT,
|
||||
street1Calls TINYINT,
|
||||
street2Calls TINYINT,
|
||||
street3Calls TINYINT,
|
||||
street4Calls TINYINT,
|
||||
street0Bets TINYINT,
|
||||
street1Bets TINYINT,
|
||||
street2Bets TINYINT,
|
||||
street3Bets TINYINT,
|
||||
street4Bets TINYINT,
|
||||
street0Raises TINYINT,
|
||||
street1Raises TINYINT,
|
||||
street2Raises TINYINT,
|
||||
street3Raises TINYINT,
|
||||
street4Raises TINYINT,
|
||||
|
||||
actionString VARCHAR(15),
|
||||
|
||||
FOREIGN KEY (tourneysPlayersId) REFERENCES TourneysPlayers(id))
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createHandsPlayersTable'] = """CREATE TABLE HandsPlayers (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
handId BIGINT NOT NULL, FOREIGN KEY (handId) REFERENCES Hands(id),
|
||||
playerId INT NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
startCash INT NOT NULL,
|
||||
position CHAR(1),
|
||||
seatNo SMALLINT NOT NULL,
|
||||
|
||||
card1 smallint NOT NULL, /* 0=none, 1-13=2-Ah 14-26=2-Ad 27-39=2-Ac 40-52=2-As */
|
||||
card2 smallint NOT NULL,
|
||||
card3 smallint,
|
||||
card4 smallint,
|
||||
card5 smallint,
|
||||
card6 smallint,
|
||||
card7 smallint,
|
||||
startCards smallint,
|
||||
|
||||
ante INT,
|
||||
winnings int NOT NULL,
|
||||
rake int NOT NULL,
|
||||
totalProfit INT NOT NULL,
|
||||
comment text,
|
||||
commentTs timestamp without time zone,
|
||||
tourneysPlayersId BIGINT,
|
||||
tourneyTypeId INT NOT NULL, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
|
||||
wonWhenSeenStreet1 FLOAT NOT NULL,
|
||||
wonWhenSeenStreet2 FLOAT,
|
||||
wonWhenSeenStreet3 FLOAT,
|
||||
wonWhenSeenStreet4 FLOAT,
|
||||
wonAtSD FLOAT NOT NULL,
|
||||
|
||||
street0VPI BOOLEAN NOT NULL,
|
||||
street0Aggr BOOLEAN NOT NULL,
|
||||
street0_3BChance BOOLEAN NOT NULL,
|
||||
street0_3BDone BOOLEAN NOT NULL,
|
||||
street0_4BChance BOOLEAN,
|
||||
street0_4BDone BOOLEAN,
|
||||
other3BStreet0 BOOLEAN,
|
||||
other4BStreet0 BOOLEAN,
|
||||
|
||||
street1Seen BOOLEAN NOT NULL,
|
||||
street2Seen BOOLEAN NOT NULL,
|
||||
street3Seen BOOLEAN NOT NULL,
|
||||
street4Seen BOOLEAN NOT NULL,
|
||||
sawShowdown BOOLEAN NOT NULL,
|
||||
|
||||
street1Aggr BOOLEAN NOT NULL,
|
||||
street2Aggr BOOLEAN NOT NULL,
|
||||
street3Aggr BOOLEAN NOT NULL,
|
||||
street4Aggr BOOLEAN NOT NULL,
|
||||
|
||||
otherRaisedStreet0 BOOLEAN,
|
||||
otherRaisedStreet1 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet2 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet3 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet4 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet0 BOOLEAN,
|
||||
foldToOtherRaisedStreet1 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet2 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet3 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet4 BOOLEAN NOT NULL,
|
||||
|
||||
stealAttemptChance BOOLEAN NOT NULL,
|
||||
stealAttempted BOOLEAN NOT NULL,
|
||||
foldBbToStealChance BOOLEAN NOT NULL,
|
||||
foldedBbToSteal BOOLEAN NOT NULL,
|
||||
foldSbToStealChance BOOLEAN NOT NULL,
|
||||
foldedSbToSteal BOOLEAN NOT NULL,
|
||||
|
||||
street1CBChance BOOLEAN NOT NULL,
|
||||
street1CBDone BOOLEAN NOT NULL,
|
||||
street2CBChance BOOLEAN NOT NULL,
|
||||
street2CBDone BOOLEAN NOT NULL,
|
||||
street3CBChance BOOLEAN NOT NULL,
|
||||
street3CBDone BOOLEAN NOT NULL,
|
||||
street4CBChance BOOLEAN NOT NULL,
|
||||
street4CBDone BOOLEAN NOT NULL,
|
||||
|
||||
foldToStreet1CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet1CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet2CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet2CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet3CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet3CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet4CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet4CBDone BOOLEAN NOT NULL,
|
||||
|
||||
street1CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street1CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street2CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street2CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street3CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street3CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street4CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street4CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
|
||||
street0Calls SMALLINT,
|
||||
street1Calls SMALLINT,
|
||||
street2Calls SMALLINT,
|
||||
street3Calls SMALLINT,
|
||||
street4Calls SMALLINT,
|
||||
street0Bets SMALLINT,
|
||||
street1Bets SMALLINT,
|
||||
street2Bets SMALLINT,
|
||||
street3Bets SMALLINT,
|
||||
street4Bets SMALLINT,
|
||||
street0Raises SMALLINT,
|
||||
street1Raises SMALLINT,
|
||||
street2Raises SMALLINT,
|
||||
street3Raises SMALLINT,
|
||||
street4Raises SMALLINT,
|
||||
|
||||
actionString VARCHAR(15),
|
||||
|
||||
FOREIGN KEY (tourneysPlayersId) REFERENCES TourneysPlayers(id))"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createHandsPlayersTable'] = """ """
|
||||
|
||||
|
||||
################################
|
||||
# Create TourneysPlayers
|
||||
################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createTourneysPlayersTable'] = """CREATE TABLE TourneysPlayers (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
tourneyId INT UNSIGNED NOT NULL, FOREIGN KEY (tourneyId) REFERENCES Tourneys(id),
|
||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
payinAmount INT NOT NULL,
|
||||
rank INT NOT NULL,
|
||||
winnings INT NOT NULL,
|
||||
comment TEXT,
|
||||
commentTs DATETIME)
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createTourneysPlayersTable'] = """CREATE TABLE TourneysPlayers (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
tourneyId INT, FOREIGN KEY (tourneyId) REFERENCES Tourneys(id),
|
||||
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
payinAmount INT,
|
||||
rank INT,
|
||||
winnings INT,
|
||||
comment TEXT,
|
||||
commentTs timestamp without time zone)"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createTourneysPlayersTable'] = """ """
|
||||
|
||||
|
||||
################################
|
||||
# Create HandsActions
|
||||
################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createHandsActionsTable'] = """CREATE TABLE HandsActions (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
handsPlayerId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handsPlayerId) REFERENCES HandsPlayers(id),
|
||||
street SMALLINT NOT NULL,
|
||||
actionNo SMALLINT NOT NULL,
|
||||
action CHAR(5) NOT NULL,
|
||||
allIn BOOLEAN NOT NULL,
|
||||
amount INT NOT NULL,
|
||||
comment TEXT,
|
||||
commentTs DATETIME)
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createHandsActionsTable'] = """CREATE TABLE HandsActions (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
handsPlayerId BIGINT, FOREIGN KEY (handsPlayerId) REFERENCES HandsPlayers(id),
|
||||
street SMALLINT,
|
||||
actionNo SMALLINT,
|
||||
action CHAR(5),
|
||||
allIn BOOLEAN,
|
||||
amount INT,
|
||||
comment TEXT,
|
||||
commentTs timestamp without time zone)"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createHandsActionsTable'] = """ """
|
||||
|
||||
|
||||
################################
|
||||
# Create HudCache
|
||||
################################
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['createHudCacheTable'] = """CREATE TABLE HudCache (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
activeSeats SMALLINT NOT NULL,
|
||||
position CHAR(1),
|
||||
tourneyTypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
styleKey CHAR(7) NOT NULL, /* 1st char is style (A/T/H/S), other 6 are the key */
|
||||
HDs INT NOT NULL,
|
||||
|
||||
wonWhenSeenStreet1 FLOAT NOT NULL,
|
||||
wonWhenSeenStreet2 FLOAT,
|
||||
wonWhenSeenStreet3 FLOAT,
|
||||
wonWhenSeenStreet4 FLOAT,
|
||||
wonAtSD FLOAT NOT NULL,
|
||||
|
||||
street0VPI INT NOT NULL,
|
||||
street0Aggr INT NOT NULL,
|
||||
street0_3BChance INT NOT NULL,
|
||||
street0_3BDone INT NOT NULL,
|
||||
street0_4BChance INT,
|
||||
street0_4BDone INT,
|
||||
other3BStreet0 INT,
|
||||
other4BStreet0 INT,
|
||||
|
||||
street1Seen INT NOT NULL,
|
||||
street2Seen INT NOT NULL,
|
||||
street3Seen INT NOT NULL,
|
||||
street4Seen INT NOT NULL,
|
||||
sawShowdown INT NOT NULL,
|
||||
|
||||
street1Aggr INT NOT NULL,
|
||||
street2Aggr INT NOT NULL,
|
||||
street3Aggr INT NOT NULL,
|
||||
street4Aggr INT NOT NULL,
|
||||
|
||||
otherRaisedStreet0 INT,
|
||||
otherRaisedStreet1 INT NOT NULL,
|
||||
otherRaisedStreet2 INT NOT NULL,
|
||||
otherRaisedStreet3 INT NOT NULL,
|
||||
otherRaisedStreet4 INT NOT NULL,
|
||||
foldToOtherRaisedStreet0 INT,
|
||||
foldToOtherRaisedStreet1 INT NOT NULL,
|
||||
foldToOtherRaisedStreet2 INT NOT NULL,
|
||||
foldToOtherRaisedStreet3 INT NOT NULL,
|
||||
foldToOtherRaisedStreet4 INT NOT NULL,
|
||||
|
||||
stealAttemptChance INT NOT NULL,
|
||||
stealAttempted INT NOT NULL,
|
||||
foldBbToStealChance INT NOT NULL,
|
||||
foldedBbToSteal INT NOT NULL,
|
||||
foldSbToStealChance INT NOT NULL,
|
||||
foldedSbToSteal INT NOT NULL,
|
||||
|
||||
street1CBChance INT NOT NULL,
|
||||
street1CBDone INT NOT NULL,
|
||||
street2CBChance INT NOT NULL,
|
||||
street2CBDone INT NOT NULL,
|
||||
street3CBChance INT NOT NULL,
|
||||
street3CBDone INT NOT NULL,
|
||||
street4CBChance INT NOT NULL,
|
||||
street4CBDone INT NOT NULL,
|
||||
|
||||
foldToStreet1CBChance INT NOT NULL,
|
||||
foldToStreet1CBDone INT NOT NULL,
|
||||
foldToStreet2CBChance INT NOT NULL,
|
||||
foldToStreet2CBDone INT NOT NULL,
|
||||
foldToStreet3CBChance INT NOT NULL,
|
||||
foldToStreet3CBDone INT NOT NULL,
|
||||
foldToStreet4CBChance INT NOT NULL,
|
||||
foldToStreet4CBDone INT NOT NULL,
|
||||
|
||||
totalProfit INT NOT NULL,
|
||||
|
||||
street1CheckCallRaiseChance INT NOT NULL,
|
||||
street1CheckCallRaiseDone INT NOT NULL,
|
||||
street2CheckCallRaiseChance INT NOT NULL,
|
||||
street2CheckCallRaiseDone INT NOT NULL,
|
||||
street3CheckCallRaiseChance INT NOT NULL,
|
||||
street3CheckCallRaiseDone INT NOT NULL,
|
||||
street4CheckCallRaiseChance INT NOT NULL,
|
||||
street4CheckCallRaiseDone INT NOT NULL,
|
||||
|
||||
street0Calls INT,
|
||||
street1Calls INT,
|
||||
street2Calls INT,
|
||||
street3Calls INT,
|
||||
street4Calls INT,
|
||||
street0Bets INT,
|
||||
street1Bets INT,
|
||||
street2Bets INT,
|
||||
street3Bets INT,
|
||||
street4Bets INT,
|
||||
street0Raises INT,
|
||||
street1Raises INT,
|
||||
street2Raises INT,
|
||||
street3Raises INT,
|
||||
street4Raises INT)
|
||||
|
||||
ENGINE=INNODB"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['createHudCacheTable'] = """CREATE TABLE HudCache (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
gametypeId INT, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
activeSeats SMALLINT,
|
||||
position CHAR(1),
|
||||
tourneyTypeId INT, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
styleKey CHAR(7) NOT NULL, /* 1st char is style (A/T/H/S), other 6 are the key */
|
||||
HDs INT,
|
||||
|
||||
wonWhenSeenStreet1 FLOAT NOT NULL,
|
||||
wonWhenSeenStreet2 FLOAT,
|
||||
wonWhenSeenStreet3 FLOAT,
|
||||
wonWhenSeenStreet4 FLOAT,
|
||||
wonAtSD FLOAT NOT NULL,
|
||||
|
||||
street0VPI INT NOT NULL,
|
||||
street0Aggr INT,
|
||||
street0_3BChance INT NOT NULL,
|
||||
street0_3BDone INT NOT NULL,
|
||||
street0_4BChance INT,
|
||||
street0_4BDone INT,
|
||||
other3BStreet0 INT,
|
||||
other4BStreet0 INT,
|
||||
|
||||
street1Seen INT,
|
||||
street2Seen INT,
|
||||
street3Seen INT,
|
||||
street4Seen INT,
|
||||
sawShowdown INT,
|
||||
street1Aggr INT,
|
||||
street2Aggr INT,
|
||||
street3Aggr INT,
|
||||
street4Aggr INT,
|
||||
|
||||
otherRaisedStreet0 INT,
|
||||
otherRaisedStreet1 INT,
|
||||
otherRaisedStreet2 INT,
|
||||
otherRaisedStreet3 INT,
|
||||
otherRaisedStreet4 INT,
|
||||
foldToOtherRaisedStreet0 INT,
|
||||
foldToOtherRaisedStreet1 INT,
|
||||
foldToOtherRaisedStreet2 INT,
|
||||
foldToOtherRaisedStreet3 INT,
|
||||
foldToOtherRaisedStreet4 INT,
|
||||
|
||||
stealAttemptChance INT,
|
||||
stealAttempted INT,
|
||||
foldBbToStealChance INT,
|
||||
foldedBbToSteal INT,
|
||||
foldSbToStealChance INT,
|
||||
foldedSbToSteal INT,
|
||||
|
||||
street1CBChance INT,
|
||||
street1CBDone INT,
|
||||
street2CBChance INT,
|
||||
street2CBDone INT,
|
||||
street3CBChance INT,
|
||||
street3CBDone INT,
|
||||
street4CBChance INT,
|
||||
street4CBDone INT,
|
||||
|
||||
foldToStreet1CBChance INT,
|
||||
foldToStreet1CBDone INT,
|
||||
foldToStreet2CBChance INT,
|
||||
foldToStreet2CBDone INT,
|
||||
foldToStreet3CBChance INT,
|
||||
foldToStreet3CBDone INT,
|
||||
foldToStreet4CBChance INT,
|
||||
foldToStreet4CBDone INT,
|
||||
|
||||
totalProfit INT,
|
||||
|
||||
street1CheckCallRaiseChance INT,
|
||||
street1CheckCallRaiseDone INT,
|
||||
street2CheckCallRaiseChance INT,
|
||||
street2CheckCallRaiseDone INT,
|
||||
street3CheckCallRaiseChance INT,
|
||||
street3CheckCallRaiseDone INT,
|
||||
street4CheckCallRaiseChance INT,
|
||||
street4CheckCallRaiseDone INT,
|
||||
|
||||
street0Calls INT,
|
||||
street1Calls INT,
|
||||
street2Calls INT,
|
||||
street3Calls INT,
|
||||
street4Calls INT,
|
||||
street0Bets INT,
|
||||
street1Bets INT,
|
||||
street2Bets INT,
|
||||
street3Bets INT,
|
||||
street4Bets INT,
|
||||
street0Raises INT,
|
||||
street1Raises INT,
|
||||
street2Raises INT,
|
||||
street3Raises INT,
|
||||
street4Raises INT)
|
||||
"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['createHudCacheTable'] = """ """
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['addTourneyIndex'] = """ALTER TABLE Tourneys ADD INDEX siteTourneyNo(siteTourneyNo)"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['addTourneyIndex'] = """CREATE INDEX siteTourneyNo ON Tourneys (siteTourneyNo)"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['addHandsIndex'] = """ """
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['addHandsIndex'] = """ALTER TABLE Hands ADD INDEX siteHandNo(siteHandNo)"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['addHandsIndex'] = """CREATE INDEX siteHandNo ON Hands (siteHandNo)"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['addHandsIndex'] = """ """
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB'):
|
||||
self.query['addPlayersIndex'] = """ALTER TABLE Players ADD INDEX name(name)"""
|
||||
elif(self.dbname == 'PostgreSQL'):
|
||||
self.query['addPlayersIndex'] = """CREATE INDEX name ON Players (name)"""
|
||||
elif(self.dbname == 'SQLite'):
|
||||
self.query['addPlayersIndex'] = """ """
|
||||
|
||||
|
||||
if(self.dbname == 'MySQL InnoDB' or self.dbname == 'PostgreSQL'):
|
||||
self.query['set tx level'] = """SET SESSION TRANSACTION
|
||||
|
|
|
@ -86,6 +86,7 @@ class GuiBulkImport():
|
|||
|
||||
self.lab_info.set_text("Import finished")
|
||||
except:
|
||||
print "bulkimport.loadclicked error: "+str(sys.exc_value)
|
||||
pass
|
||||
self.settings['global_lock'].release()
|
||||
else:
|
||||
|
|
857
pyfpdb/SQL.py
857
pyfpdb/SQL.py
|
@ -161,7 +161,846 @@ class Sql:
|
|||
# Support for the Free Poker DataBase = fpdb http://fpdb.sourceforge.net/
|
||||
#
|
||||
if type == 'fpdb':
|
||||
|
||||
|
||||
################################
|
||||
# List tables
|
||||
################################
|
||||
if db_server == 'mysql':
|
||||
self.query['list_tables'] = """SHOW TABLES"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['list_tables'] = """SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['list_tables'] = """SELECT name FROM sqlite_master
|
||||
WHERE type='table'
|
||||
ORDER BY name;"""
|
||||
|
||||
##################################################################
|
||||
# Drop Tables - MySQL, PostgreSQL and SQLite all share same syntax
|
||||
##################################################################
|
||||
|
||||
self.query['drop_table'] = """DROP TABLE IF EXISTS """
|
||||
|
||||
|
||||
################################
|
||||
# Create Settings
|
||||
################################
|
||||
if db_server == 'mysql':
|
||||
self.query['createSettingsTable'] = """CREATE TABLE Settings (
|
||||
version SMALLINT NOT NULL)
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createSettingsTable'] = """CREATE TABLE Settings (version SMALLINT)"""
|
||||
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createSettingsTable'] = """CREATE TABLE Settings
|
||||
(version INTEGER) """
|
||||
|
||||
|
||||
################################
|
||||
# Create Sites
|
||||
################################
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['createSitesTable'] = """CREATE TABLE Sites (
|
||||
id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
name varchar(32) NOT NULL,
|
||||
currency char(3) NOT NULL)
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createSitesTable'] = """CREATE TABLE Sites (
|
||||
id SERIAL, PRIMARY KEY (id),
|
||||
name varchar(32),
|
||||
currency char(3))"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createSitesTable'] = """CREATE TABLE Sites (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
currency TEXT NOT NULL)"""
|
||||
|
||||
|
||||
################################
|
||||
# Create Gametypes
|
||||
################################
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['createGametypesTable'] = """CREATE TABLE Gametypes (
|
||||
id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
type char(4) NOT NULL,
|
||||
base char(4) NOT NULL,
|
||||
category varchar(9) NOT NULL,
|
||||
limitType char(2) NOT NULL,
|
||||
hiLo char(1) NOT NULL,
|
||||
smallBlind int,
|
||||
bigBlind int,
|
||||
smallBet int NOT NULL,
|
||||
bigBet int NOT NULL)
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createGametypesTable'] = """CREATE TABLE Gametypes (
|
||||
id SERIAL, PRIMARY KEY (id),
|
||||
siteId INTEGER, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
type char(4),
|
||||
base char(4),
|
||||
category varchar(9),
|
||||
limitType char(2),
|
||||
hiLo char(1),
|
||||
smallBlind int,
|
||||
bigBlind int,
|
||||
smallBet int,
|
||||
bigBet int)"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createGametypesTable'] = """CREATE TABLE GameTypes (
|
||||
id INTEGER PRIMARY KEY,
|
||||
siteId INTEGER,
|
||||
type TEXT,
|
||||
base TEXT,
|
||||
category TEXT,
|
||||
limitType TEXT,
|
||||
hiLo TEXT,
|
||||
smallBlind INTEGER,
|
||||
bigBlind INTEGER,
|
||||
smallBet INTEGER,
|
||||
bigBet INTEGER,
|
||||
FOREIGN KEY(siteId) REFERENCES Sites(id) ON DELETE CASCADE)"""
|
||||
|
||||
|
||||
################################
|
||||
# Create Players
|
||||
################################
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['createPlayersTable'] = """CREATE TABLE Players (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
name VARCHAR(32) CHARACTER SET utf8 NOT NULL,
|
||||
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
comment text,
|
||||
commentTs DATETIME)
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createPlayersTable'] = """CREATE TABLE Players (
|
||||
id SERIAL, PRIMARY KEY (id),
|
||||
name VARCHAR(32),
|
||||
siteId INTEGER, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
comment text,
|
||||
commentTs timestamp without time zone)"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createPlayersTable'] = """CREATE TABLE Players (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT,
|
||||
siteId INTEGER,
|
||||
comment TEXT,
|
||||
commentTs BLOB,
|
||||
FOREIGN KEY(siteId) REFERENCES Sites(id) ON DELETE CASCADE)"""
|
||||
|
||||
|
||||
################################
|
||||
# Create Autorates
|
||||
################################
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['createAutoratesTable'] = """CREATE TABLE Autorates (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
description varchar(50) NOT NULL,
|
||||
shortDesc char(8) NOT NULL,
|
||||
ratingTime DATETIME NOT NULL,
|
||||
handCount int NOT NULL)
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createAutoratesTable'] = """CREATE TABLE Autorates (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
gametypeId INT, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
description varchar(50),
|
||||
shortDesc char(8),
|
||||
ratingTime timestamp without time zone,
|
||||
handCount int)"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createAutoratesTable'] = """ """
|
||||
|
||||
|
||||
################################
|
||||
# Create Hands
|
||||
################################
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['createHandsTable'] = """CREATE TABLE Hands (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
tableName VARCHAR(20) NOT NULL,
|
||||
siteHandNo BIGINT NOT NULL,
|
||||
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
handStart DATETIME NOT NULL,
|
||||
importTime DATETIME NOT NULL,
|
||||
seats TINYINT NOT NULL,
|
||||
maxSeats TINYINT NOT NULL,
|
||||
boardcard1 smallint, /* 0=none, 1-13=2-Ah 14-26=2-Ad 27-39=2-Ac 40-52=2-As */
|
||||
boardcard2 smallint,
|
||||
boardcard3 smallint,
|
||||
boardcard4 smallint,
|
||||
boardcard5 smallint,
|
||||
texture smallint,
|
||||
playersVpi SMALLINT NOT NULL, /* num of players vpi */
|
||||
playersAtStreet1 SMALLINT NOT NULL, /* num of players seeing flop/street4 */
|
||||
playersAtStreet2 SMALLINT NOT NULL,
|
||||
playersAtStreet3 SMALLINT NOT NULL,
|
||||
playersAtStreet4 SMALLINT NOT NULL,
|
||||
playersAtShowdown SMALLINT NOT NULL,
|
||||
street0Raises TINYINT NOT NULL, /* num small bets paid to see flop/street4, including blind */
|
||||
street1Raises TINYINT NOT NULL, /* num small bets paid to see turn/street5 */
|
||||
street2Raises TINYINT NOT NULL, /* num big bets paid to see river/street6 */
|
||||
street3Raises TINYINT NOT NULL, /* num big bets paid to see sd/street7 */
|
||||
street4Raises TINYINT NOT NULL, /* num big bets paid to see showdown */
|
||||
street1Pot INT, /* pot size at flop/street4 */
|
||||
street2Pot INT, /* pot size at turn/street5 */
|
||||
street3Pot INT, /* pot size at river/street6 */
|
||||
street4Pot INT, /* pot size at sd/street7 */
|
||||
showdownPot INT, /* pot size at sd/street7 */
|
||||
comment TEXT,
|
||||
commentTs DATETIME)
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createHandsTable'] = """CREATE TABLE Hands (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
tableName VARCHAR(20) NOT NULL,
|
||||
siteHandNo BIGINT NOT NULL,
|
||||
gametypeId INT NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
handStart timestamp without time zone NOT NULL,
|
||||
importTime timestamp without time zone NOT NULL,
|
||||
seats SMALLINT NOT NULL,
|
||||
maxSeats SMALLINT NOT NULL,
|
||||
boardcard1 smallint, /* 0=none, 1-13=2-Ah 14-26=2-Ad 27-39=2-Ac 40-52=2-As */
|
||||
boardcard2 smallint,
|
||||
boardcard3 smallint,
|
||||
boardcard4 smallint,
|
||||
boardcard5 smallint,
|
||||
texture smallint,
|
||||
playersVpi SMALLINT NOT NULL, /* num of players vpi */
|
||||
playersAtStreet1 SMALLINT NOT NULL, /* num of players seeing flop/street4 */
|
||||
playersAtStreet2 SMALLINT NOT NULL,
|
||||
playersAtStreet3 SMALLINT NOT NULL,
|
||||
playersAtStreet4 SMALLINT NOT NULL,
|
||||
playersAtShowdown SMALLINT NOT NULL,
|
||||
street0Raises SMALLINT NOT NULL, /* num small bets paid to see flop/street4, including blind */
|
||||
street1Raises SMALLINT NOT NULL, /* num small bets paid to see turn/street5 */
|
||||
street2Raises SMALLINT NOT NULL, /* num big bets paid to see river/street6 */
|
||||
street3Raises SMALLINT NOT NULL, /* num big bets paid to see sd/street7 */
|
||||
street4Raises SMALLINT NOT NULL, /* num big bets paid to see showdown */
|
||||
street1Pot INT, /* pot size at flop/street4 */
|
||||
street2Pot INT, /* pot size at turn/street5 */
|
||||
street3Pot INT, /* pot size at river/street6 */
|
||||
street4Pot INT, /* pot size at sd/street7 */
|
||||
showdownPot INT, /* pot size at sd/street7 */
|
||||
comment TEXT,
|
||||
commentTs timestamp without time zone)"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createHandsTable'] = """CREATE TABLE Hands (
|
||||
id INTEGER PRIMARY KEY,
|
||||
tableName TEXT(20),
|
||||
siteHandNo INTEGER,
|
||||
gametypeId INTEGER,
|
||||
handStart BLOB,
|
||||
importTime BLOB,
|
||||
seats INTEGER,
|
||||
maxSeats INTEGER,
|
||||
comment TEXT,
|
||||
commentTs BLOB,
|
||||
FOREIGN KEY(gametypeId) REFERENCES Gametypes(id) ON DELETE CASCADE)"""
|
||||
|
||||
|
||||
################################
|
||||
# Create TourneyTypes
|
||||
################################
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['createTourneyTypesTable'] = """CREATE TABLE TourneyTypes (
|
||||
id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
buyin INT NOT NULL,
|
||||
fee INT NOT NULL,
|
||||
knockout INT NOT NULL,
|
||||
rebuyOrAddon BOOLEAN NOT NULL)
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createTourneyTypesTable'] = """CREATE TABLE TourneyTypes (
|
||||
id SERIAL, PRIMARY KEY (id),
|
||||
siteId INT, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
buyin INT,
|
||||
fee INT,
|
||||
knockout INT,
|
||||
rebuyOrAddon BOOLEAN)"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createTourneyTypesTable'] = """ """
|
||||
|
||||
|
||||
################################
|
||||
# Create Tourneys
|
||||
################################
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['createTourneysTable'] = """CREATE TABLE Tourneys (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
tourneyTypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
siteTourneyNo BIGINT NOT NULL,
|
||||
entries INT NOT NULL,
|
||||
prizepool INT NOT NULL,
|
||||
startTime DATETIME NOT NULL,
|
||||
comment TEXT,
|
||||
commentTs DATETIME)
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createTourneysTable'] = """CREATE TABLE Tourneys (
|
||||
id SERIAL, PRIMARY KEY (id),
|
||||
tourneyTypeId INT, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
siteTourneyNo BIGINT,
|
||||
entries INT,
|
||||
prizepool INT,
|
||||
startTime timestamp without time zone,
|
||||
comment TEXT,
|
||||
commentTs timestamp without time zone)"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createTourneysTable'] = """CREATE TABLE TourneyTypes (
|
||||
id INTEGER PRIMARY KEY,
|
||||
siteId INTEGER,
|
||||
buyin INTEGER,
|
||||
fee INTEGER,
|
||||
knockout INTEGER,
|
||||
rebuyOrAddon BOOL,
|
||||
FOREIGN KEY(siteId) REFERENCES Sites(id) ON DELETE CASCADE)"""
|
||||
|
||||
################################
|
||||
# Create HandsPlayers
|
||||
################################
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['createHandsPlayersTable'] = """CREATE TABLE HandsPlayers (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
handId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handId) REFERENCES Hands(id),
|
||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
startCash INT NOT NULL,
|
||||
position CHAR(1),
|
||||
seatNo SMALLINT NOT NULL,
|
||||
|
||||
card1 smallint NOT NULL, /* 0=none, 1-13=2-Ah 14-26=2-Ad 27-39=2-Ac 40-52=2-As */
|
||||
card2 smallint NOT NULL,
|
||||
card3 smallint,
|
||||
card4 smallint,
|
||||
card5 smallint,
|
||||
card6 smallint,
|
||||
card7 smallint,
|
||||
startCards smallint,
|
||||
|
||||
ante INT,
|
||||
winnings int NOT NULL,
|
||||
rake int NOT NULL,
|
||||
totalProfit INT NOT NULL,
|
||||
comment text,
|
||||
commentTs DATETIME,
|
||||
tourneysPlayersId BIGINT UNSIGNED,
|
||||
tourneyTypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
|
||||
wonWhenSeenStreet1 FLOAT NOT NULL,
|
||||
wonWhenSeenStreet2 FLOAT,
|
||||
wonWhenSeenStreet3 FLOAT,
|
||||
wonWhenSeenStreet4 FLOAT,
|
||||
wonAtSD FLOAT NOT NULL,
|
||||
|
||||
street0VPI BOOLEAN NOT NULL,
|
||||
street0Aggr BOOLEAN NOT NULL,
|
||||
street0_3BChance BOOLEAN NOT NULL,
|
||||
street0_3BDone BOOLEAN NOT NULL,
|
||||
street0_4BChance BOOLEAN,
|
||||
street0_4BDone BOOLEAN,
|
||||
other3BStreet0 BOOLEAN,
|
||||
other4BStreet0 BOOLEAN,
|
||||
|
||||
street1Seen BOOLEAN NOT NULL,
|
||||
street2Seen BOOLEAN NOT NULL,
|
||||
street3Seen BOOLEAN NOT NULL,
|
||||
street4Seen BOOLEAN NOT NULL,
|
||||
sawShowdown BOOLEAN NOT NULL,
|
||||
|
||||
street1Aggr BOOLEAN NOT NULL,
|
||||
street2Aggr BOOLEAN NOT NULL,
|
||||
street3Aggr BOOLEAN NOT NULL,
|
||||
street4Aggr BOOLEAN NOT NULL,
|
||||
|
||||
otherRaisedStreet0 BOOLEAN,
|
||||
otherRaisedStreet1 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet2 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet3 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet4 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet0 BOOLEAN,
|
||||
foldToOtherRaisedStreet1 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet2 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet3 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet4 BOOLEAN NOT NULL,
|
||||
|
||||
stealAttemptChance BOOLEAN NOT NULL,
|
||||
stealAttempted BOOLEAN NOT NULL,
|
||||
foldBbToStealChance BOOLEAN NOT NULL,
|
||||
foldedBbToSteal BOOLEAN NOT NULL,
|
||||
foldSbToStealChance BOOLEAN NOT NULL,
|
||||
foldedSbToSteal BOOLEAN NOT NULL,
|
||||
|
||||
street1CBChance BOOLEAN NOT NULL,
|
||||
street1CBDone BOOLEAN NOT NULL,
|
||||
street2CBChance BOOLEAN NOT NULL,
|
||||
street2CBDone BOOLEAN NOT NULL,
|
||||
street3CBChance BOOLEAN NOT NULL,
|
||||
street3CBDone BOOLEAN NOT NULL,
|
||||
street4CBChance BOOLEAN NOT NULL,
|
||||
street4CBDone BOOLEAN NOT NULL,
|
||||
|
||||
foldToStreet1CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet1CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet2CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet2CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet3CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet3CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet4CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet4CBDone BOOLEAN NOT NULL,
|
||||
|
||||
street1CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street1CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street2CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street2CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street3CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street3CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street4CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street4CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
|
||||
street0Calls TINYINT,
|
||||
street1Calls TINYINT,
|
||||
street2Calls TINYINT,
|
||||
street3Calls TINYINT,
|
||||
street4Calls TINYINT,
|
||||
street0Bets TINYINT,
|
||||
street1Bets TINYINT,
|
||||
street2Bets TINYINT,
|
||||
street3Bets TINYINT,
|
||||
street4Bets TINYINT,
|
||||
street0Raises TINYINT,
|
||||
street1Raises TINYINT,
|
||||
street2Raises TINYINT,
|
||||
street3Raises TINYINT,
|
||||
street4Raises TINYINT,
|
||||
|
||||
actionString VARCHAR(15),
|
||||
|
||||
FOREIGN KEY (tourneysPlayersId) REFERENCES TourneysPlayers(id))
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createHandsPlayersTable'] = """CREATE TABLE HandsPlayers (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
handId BIGINT NOT NULL, FOREIGN KEY (handId) REFERENCES Hands(id),
|
||||
playerId INT NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
startCash INT NOT NULL,
|
||||
position CHAR(1),
|
||||
seatNo SMALLINT NOT NULL,
|
||||
|
||||
card1 smallint NOT NULL, /* 0=none, 1-13=2-Ah 14-26=2-Ad 27-39=2-Ac 40-52=2-As */
|
||||
card2 smallint NOT NULL,
|
||||
card3 smallint,
|
||||
card4 smallint,
|
||||
card5 smallint,
|
||||
card6 smallint,
|
||||
card7 smallint,
|
||||
startCards smallint,
|
||||
|
||||
ante INT,
|
||||
winnings int NOT NULL,
|
||||
rake int NOT NULL,
|
||||
totalProfit INT NOT NULL,
|
||||
comment text,
|
||||
commentTs timestamp without time zone,
|
||||
tourneysPlayersId BIGINT,
|
||||
tourneyTypeId INT NOT NULL, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
|
||||
wonWhenSeenStreet1 FLOAT NOT NULL,
|
||||
wonWhenSeenStreet2 FLOAT,
|
||||
wonWhenSeenStreet3 FLOAT,
|
||||
wonWhenSeenStreet4 FLOAT,
|
||||
wonAtSD FLOAT NOT NULL,
|
||||
|
||||
street0VPI BOOLEAN NOT NULL,
|
||||
street0Aggr BOOLEAN NOT NULL,
|
||||
street0_3BChance BOOLEAN NOT NULL,
|
||||
street0_3BDone BOOLEAN NOT NULL,
|
||||
street0_4BChance BOOLEAN,
|
||||
street0_4BDone BOOLEAN,
|
||||
other3BStreet0 BOOLEAN,
|
||||
other4BStreet0 BOOLEAN,
|
||||
|
||||
street1Seen BOOLEAN NOT NULL,
|
||||
street2Seen BOOLEAN NOT NULL,
|
||||
street3Seen BOOLEAN NOT NULL,
|
||||
street4Seen BOOLEAN NOT NULL,
|
||||
sawShowdown BOOLEAN NOT NULL,
|
||||
|
||||
street1Aggr BOOLEAN NOT NULL,
|
||||
street2Aggr BOOLEAN NOT NULL,
|
||||
street3Aggr BOOLEAN NOT NULL,
|
||||
street4Aggr BOOLEAN NOT NULL,
|
||||
|
||||
otherRaisedStreet0 BOOLEAN,
|
||||
otherRaisedStreet1 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet2 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet3 BOOLEAN NOT NULL,
|
||||
otherRaisedStreet4 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet0 BOOLEAN,
|
||||
foldToOtherRaisedStreet1 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet2 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet3 BOOLEAN NOT NULL,
|
||||
foldToOtherRaisedStreet4 BOOLEAN NOT NULL,
|
||||
|
||||
stealAttemptChance BOOLEAN NOT NULL,
|
||||
stealAttempted BOOLEAN NOT NULL,
|
||||
foldBbToStealChance BOOLEAN NOT NULL,
|
||||
foldedBbToSteal BOOLEAN NOT NULL,
|
||||
foldSbToStealChance BOOLEAN NOT NULL,
|
||||
foldedSbToSteal BOOLEAN NOT NULL,
|
||||
|
||||
street1CBChance BOOLEAN NOT NULL,
|
||||
street1CBDone BOOLEAN NOT NULL,
|
||||
street2CBChance BOOLEAN NOT NULL,
|
||||
street2CBDone BOOLEAN NOT NULL,
|
||||
street3CBChance BOOLEAN NOT NULL,
|
||||
street3CBDone BOOLEAN NOT NULL,
|
||||
street4CBChance BOOLEAN NOT NULL,
|
||||
street4CBDone BOOLEAN NOT NULL,
|
||||
|
||||
foldToStreet1CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet1CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet2CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet2CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet3CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet3CBDone BOOLEAN NOT NULL,
|
||||
foldToStreet4CBChance BOOLEAN NOT NULL,
|
||||
foldToStreet4CBDone BOOLEAN NOT NULL,
|
||||
|
||||
street1CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street1CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street2CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street2CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street3CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street3CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
street4CheckCallRaiseChance BOOLEAN NOT NULL,
|
||||
street4CheckCallRaiseDone BOOLEAN NOT NULL,
|
||||
|
||||
street0Calls SMALLINT,
|
||||
street1Calls SMALLINT,
|
||||
street2Calls SMALLINT,
|
||||
street3Calls SMALLINT,
|
||||
street4Calls SMALLINT,
|
||||
street0Bets SMALLINT,
|
||||
street1Bets SMALLINT,
|
||||
street2Bets SMALLINT,
|
||||
street3Bets SMALLINT,
|
||||
street4Bets SMALLINT,
|
||||
street0Raises SMALLINT,
|
||||
street1Raises SMALLINT,
|
||||
street2Raises SMALLINT,
|
||||
street3Raises SMALLINT,
|
||||
street4Raises SMALLINT,
|
||||
|
||||
actionString VARCHAR(15),
|
||||
|
||||
FOREIGN KEY (tourneysPlayersId) REFERENCES TourneysPlayers(id))"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createHandsPlayersTable'] = """ """
|
||||
|
||||
|
||||
################################
|
||||
# Create TourneysPlayers
|
||||
################################
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['createTourneysPlayersTable'] = """CREATE TABLE TourneysPlayers (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
tourneyId INT UNSIGNED NOT NULL, FOREIGN KEY (tourneyId) REFERENCES Tourneys(id),
|
||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
payinAmount INT NOT NULL,
|
||||
rank INT NOT NULL,
|
||||
winnings INT NOT NULL,
|
||||
comment TEXT,
|
||||
commentTs DATETIME)
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createTourneysPlayersTable'] = """CREATE TABLE TourneysPlayers (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
tourneyId INT, FOREIGN KEY (tourneyId) REFERENCES Tourneys(id),
|
||||
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
payinAmount INT,
|
||||
rank INT,
|
||||
winnings INT,
|
||||
comment TEXT,
|
||||
commentTs timestamp without time zone)"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createTourneysPlayersTable'] = """ """
|
||||
|
||||
|
||||
################################
|
||||
# Create HandsActions
|
||||
################################
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['createHandsActionsTable'] = """CREATE TABLE HandsActions (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
handsPlayerId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handsPlayerId) REFERENCES HandsPlayers(id),
|
||||
street SMALLINT NOT NULL,
|
||||
actionNo SMALLINT NOT NULL,
|
||||
action CHAR(5) NOT NULL,
|
||||
allIn BOOLEAN NOT NULL,
|
||||
amount INT NOT NULL,
|
||||
comment TEXT,
|
||||
commentTs DATETIME)
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createHandsActionsTable'] = """CREATE TABLE HandsActions (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
handsPlayerId BIGINT, FOREIGN KEY (handsPlayerId) REFERENCES HandsPlayers(id),
|
||||
street SMALLINT,
|
||||
actionNo SMALLINT,
|
||||
action CHAR(5),
|
||||
allIn BOOLEAN,
|
||||
amount INT,
|
||||
comment TEXT,
|
||||
commentTs timestamp without time zone)"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createHandsActionsTable'] = """ """
|
||||
|
||||
|
||||
################################
|
||||
# Create HudCache
|
||||
################################
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['createHudCacheTable'] = """CREATE TABLE HudCache (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
activeSeats SMALLINT NOT NULL,
|
||||
position CHAR(1),
|
||||
tourneyTypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
styleKey CHAR(7) NOT NULL, /* 1st char is style (A/T/H/S), other 6 are the key */
|
||||
HDs INT NOT NULL,
|
||||
|
||||
wonWhenSeenStreet1 FLOAT NOT NULL,
|
||||
wonWhenSeenStreet2 FLOAT,
|
||||
wonWhenSeenStreet3 FLOAT,
|
||||
wonWhenSeenStreet4 FLOAT,
|
||||
wonAtSD FLOAT NOT NULL,
|
||||
|
||||
street0VPI INT NOT NULL,
|
||||
street0Aggr INT NOT NULL,
|
||||
street0_3BChance INT NOT NULL,
|
||||
street0_3BDone INT NOT NULL,
|
||||
street0_4BChance INT,
|
||||
street0_4BDone INT,
|
||||
other3BStreet0 INT,
|
||||
other4BStreet0 INT,
|
||||
|
||||
street1Seen INT NOT NULL,
|
||||
street2Seen INT NOT NULL,
|
||||
street3Seen INT NOT NULL,
|
||||
street4Seen INT NOT NULL,
|
||||
sawShowdown INT NOT NULL,
|
||||
|
||||
street1Aggr INT NOT NULL,
|
||||
street2Aggr INT NOT NULL,
|
||||
street3Aggr INT NOT NULL,
|
||||
street4Aggr INT NOT NULL,
|
||||
|
||||
otherRaisedStreet0 INT,
|
||||
otherRaisedStreet1 INT NOT NULL,
|
||||
otherRaisedStreet2 INT NOT NULL,
|
||||
otherRaisedStreet3 INT NOT NULL,
|
||||
otherRaisedStreet4 INT NOT NULL,
|
||||
foldToOtherRaisedStreet0 INT,
|
||||
foldToOtherRaisedStreet1 INT NOT NULL,
|
||||
foldToOtherRaisedStreet2 INT NOT NULL,
|
||||
foldToOtherRaisedStreet3 INT NOT NULL,
|
||||
foldToOtherRaisedStreet4 INT NOT NULL,
|
||||
|
||||
stealAttemptChance INT NOT NULL,
|
||||
stealAttempted INT NOT NULL,
|
||||
foldBbToStealChance INT NOT NULL,
|
||||
foldedBbToSteal INT NOT NULL,
|
||||
foldSbToStealChance INT NOT NULL,
|
||||
foldedSbToSteal INT NOT NULL,
|
||||
|
||||
street1CBChance INT NOT NULL,
|
||||
street1CBDone INT NOT NULL,
|
||||
street2CBChance INT NOT NULL,
|
||||
street2CBDone INT NOT NULL,
|
||||
street3CBChance INT NOT NULL,
|
||||
street3CBDone INT NOT NULL,
|
||||
street4CBChance INT NOT NULL,
|
||||
street4CBDone INT NOT NULL,
|
||||
|
||||
foldToStreet1CBChance INT NOT NULL,
|
||||
foldToStreet1CBDone INT NOT NULL,
|
||||
foldToStreet2CBChance INT NOT NULL,
|
||||
foldToStreet2CBDone INT NOT NULL,
|
||||
foldToStreet3CBChance INT NOT NULL,
|
||||
foldToStreet3CBDone INT NOT NULL,
|
||||
foldToStreet4CBChance INT NOT NULL,
|
||||
foldToStreet4CBDone INT NOT NULL,
|
||||
|
||||
totalProfit INT NOT NULL,
|
||||
|
||||
street1CheckCallRaiseChance INT NOT NULL,
|
||||
street1CheckCallRaiseDone INT NOT NULL,
|
||||
street2CheckCallRaiseChance INT NOT NULL,
|
||||
street2CheckCallRaiseDone INT NOT NULL,
|
||||
street3CheckCallRaiseChance INT NOT NULL,
|
||||
street3CheckCallRaiseDone INT NOT NULL,
|
||||
street4CheckCallRaiseChance INT NOT NULL,
|
||||
street4CheckCallRaiseDone INT NOT NULL,
|
||||
|
||||
street0Calls INT,
|
||||
street1Calls INT,
|
||||
street2Calls INT,
|
||||
street3Calls INT,
|
||||
street4Calls INT,
|
||||
street0Bets INT,
|
||||
street1Bets INT,
|
||||
street2Bets INT,
|
||||
street3Bets INT,
|
||||
street4Bets INT,
|
||||
street0Raises INT,
|
||||
street1Raises INT,
|
||||
street2Raises INT,
|
||||
street3Raises INT,
|
||||
street4Raises INT)
|
||||
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['createHudCacheTable'] = """CREATE TABLE HudCache (
|
||||
id BIGSERIAL, PRIMARY KEY (id),
|
||||
gametypeId INT, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||
activeSeats SMALLINT,
|
||||
position CHAR(1),
|
||||
tourneyTypeId INT, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||
styleKey CHAR(7) NOT NULL, /* 1st char is style (A/T/H/S), other 6 are the key */
|
||||
HDs INT,
|
||||
|
||||
wonWhenSeenStreet1 FLOAT NOT NULL,
|
||||
wonWhenSeenStreet2 FLOAT,
|
||||
wonWhenSeenStreet3 FLOAT,
|
||||
wonWhenSeenStreet4 FLOAT,
|
||||
wonAtSD FLOAT NOT NULL,
|
||||
|
||||
street0VPI INT NOT NULL,
|
||||
street0Aggr INT,
|
||||
street0_3BChance INT NOT NULL,
|
||||
street0_3BDone INT NOT NULL,
|
||||
street0_4BChance INT,
|
||||
street0_4BDone INT,
|
||||
other3BStreet0 INT,
|
||||
other4BStreet0 INT,
|
||||
|
||||
street1Seen INT,
|
||||
street2Seen INT,
|
||||
street3Seen INT,
|
||||
street4Seen INT,
|
||||
sawShowdown INT,
|
||||
street1Aggr INT,
|
||||
street2Aggr INT,
|
||||
street3Aggr INT,
|
||||
street4Aggr INT,
|
||||
|
||||
otherRaisedStreet0 INT,
|
||||
otherRaisedStreet1 INT,
|
||||
otherRaisedStreet2 INT,
|
||||
otherRaisedStreet3 INT,
|
||||
otherRaisedStreet4 INT,
|
||||
foldToOtherRaisedStreet0 INT,
|
||||
foldToOtherRaisedStreet1 INT,
|
||||
foldToOtherRaisedStreet2 INT,
|
||||
foldToOtherRaisedStreet3 INT,
|
||||
foldToOtherRaisedStreet4 INT,
|
||||
|
||||
stealAttemptChance INT,
|
||||
stealAttempted INT,
|
||||
foldBbToStealChance INT,
|
||||
foldedBbToSteal INT,
|
||||
foldSbToStealChance INT,
|
||||
foldedSbToSteal INT,
|
||||
|
||||
street1CBChance INT,
|
||||
street1CBDone INT,
|
||||
street2CBChance INT,
|
||||
street2CBDone INT,
|
||||
street3CBChance INT,
|
||||
street3CBDone INT,
|
||||
street4CBChance INT,
|
||||
street4CBDone INT,
|
||||
|
||||
foldToStreet1CBChance INT,
|
||||
foldToStreet1CBDone INT,
|
||||
foldToStreet2CBChance INT,
|
||||
foldToStreet2CBDone INT,
|
||||
foldToStreet3CBChance INT,
|
||||
foldToStreet3CBDone INT,
|
||||
foldToStreet4CBChance INT,
|
||||
foldToStreet4CBDone INT,
|
||||
|
||||
totalProfit INT,
|
||||
|
||||
street1CheckCallRaiseChance INT,
|
||||
street1CheckCallRaiseDone INT,
|
||||
street2CheckCallRaiseChance INT,
|
||||
street2CheckCallRaiseDone INT,
|
||||
street3CheckCallRaiseChance INT,
|
||||
street3CheckCallRaiseDone INT,
|
||||
street4CheckCallRaiseChance INT,
|
||||
street4CheckCallRaiseDone INT,
|
||||
|
||||
street0Calls INT,
|
||||
street1Calls INT,
|
||||
street2Calls INT,
|
||||
street3Calls INT,
|
||||
street4Calls INT,
|
||||
street0Bets INT,
|
||||
street1Bets INT,
|
||||
street2Bets INT,
|
||||
street3Bets INT,
|
||||
street4Bets INT,
|
||||
street0Raises INT,
|
||||
street1Raises INT,
|
||||
street2Raises INT,
|
||||
street3Raises INT,
|
||||
street4Raises INT)
|
||||
"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['createHudCacheTable'] = """ """
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['addTourneyIndex'] = """ALTER TABLE Tourneys ADD INDEX siteTourneyNo(siteTourneyNo)"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['addTourneyIndex'] = """CREATE INDEX siteTourneyNo ON Tourneys (siteTourneyNo)"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['addHandsIndex'] = """ """
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['addHandsIndex'] = """ALTER TABLE Hands ADD INDEX siteHandNo(siteHandNo)"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['addHandsIndex'] = """CREATE INDEX siteHandNo ON Hands (siteHandNo)"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['addHandsIndex'] = """ """
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['addPlayersIndex'] = """ALTER TABLE Players ADD INDEX name(name)"""
|
||||
elif db_server == 'postgres': # what is the correct value here?
|
||||
self.query['addPlayersIndex'] = """CREATE INDEX name ON Players (name)"""
|
||||
elif db_server == 'sqlite': # what is the correct value here?
|
||||
self.query['addPlayersIndex'] = """ """
|
||||
|
||||
|
||||
self.query['get_last_hand'] = "select max(id) from Hands"
|
||||
|
||||
self.query['get_player_id'] = """
|
||||
|
@ -171,6 +1010,8 @@ class Sql:
|
|||
and Players.SiteId = Sites.id
|
||||
"""
|
||||
|
||||
self.query['getSiteId'] = """SELECT id from Sites where name = %s"""
|
||||
|
||||
self.query['get_stats_from_hand'] = """
|
||||
SELECT hc.playerId AS player_id,
|
||||
hp.seatNo AS seat,
|
||||
|
@ -745,7 +1586,7 @@ class Sql:
|
|||
,upper(gt.limitType)
|
||||
,s.name
|
||||
"""
|
||||
#elif(self.dbname == 'SQLite'):
|
||||
#elif db_server == 'sqlite': # what is the correct value here?
|
||||
# self.query['playerDetailedStats'] = """ """
|
||||
|
||||
if db_server == 'mysql':
|
||||
|
@ -957,7 +1798,7 @@ class Sql:
|
|||
) hprof2
|
||||
on hprof2.gtId = stats.gtId
|
||||
order by stats.base, stats.limittype, stats.bigBlindDesc desc <orderbyseats>"""
|
||||
#elif(self.dbname == 'SQLite'):
|
||||
#elif db_server == 'sqlite': # what is the correct value here?
|
||||
# self.query['playerStats'] = """ """
|
||||
|
||||
if db_server == 'mysql':
|
||||
|
@ -1232,7 +2073,7 @@ class Sql:
|
|||
order by stats.category, stats.limitType, stats.bigBlindDesc desc
|
||||
<orderbyseats>, cast(stats.PlPosition as smallint)
|
||||
"""
|
||||
#elif(self.dbname == 'SQLite'):
|
||||
#elif db_server == 'sqlite': # what is the correct value here?
|
||||
# self.query['playerStatsByPosition'] = """ """
|
||||
|
||||
self.query['getRingProfitAllHandsPlayerIdSite'] = """
|
||||
|
@ -1556,15 +2397,17 @@ class Sql:
|
|||
|
||||
if db_server == 'mysql':
|
||||
self.query['analyze'] = """
|
||||
analyze table autorates, gametypes, hands, handsplayers, hudcache, players
|
||||
, settings, sites, tourneys, tourneysplayers, tourneytypes
|
||||
analyze table Autorates, GameTypes, Hands, HandsPlayers, Hudcache, Players
|
||||
, Settings, Sites, Tourneys, TourneysPlayers, TourneyTypes
|
||||
"""
|
||||
else: # assume postgres
|
||||
self.query['analyze'] = "vacuum analyze"
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['lockForInsert'] = """
|
||||
lock tables hands write, handsplayers write, handsactions write, players write, hudcache write
|
||||
lock tables Hands write, HandsPlayers write, HandsActions write, Players write
|
||||
, HudCache write, GameTypes write, Sites write, Tourneys write
|
||||
, TourneysPlayers write, TourneyTypes write, Autorates write
|
||||
"""
|
||||
else: # assume postgres
|
||||
self.query['lockForInsert'] = ""
|
||||
|
|
|
@ -232,7 +232,7 @@ class fpdb:
|
|||
# ToDo: lock all other tables so that lock doesn't have to be released
|
||||
# self.release_global_lock()
|
||||
# lock_released = True
|
||||
self.db.fdb.recreate_tables()
|
||||
self.db.recreate_tables()
|
||||
#else:
|
||||
# for other dbs use same connection as holds global lock
|
||||
# self.fdb_lock.fdb.recreate_tables()
|
||||
|
|
|
@ -33,112 +33,6 @@ class fpdb_db:
|
|||
self.db = None
|
||||
self.cursor = None
|
||||
self.sql = {}
|
||||
|
||||
# Data Structures for index and foreign key creation
|
||||
# drop_code is an int with possible values: 0 - don't drop for bulk import
|
||||
# 1 - drop during bulk import
|
||||
# db differences:
|
||||
# - note that mysql automatically creates indexes on constrained columns when
|
||||
# foreign keys are created, while postgres does not. Hence the much longer list
|
||||
# of indexes is required for postgres.
|
||||
# all primary keys are left on all the time
|
||||
#
|
||||
# table column drop_code
|
||||
|
||||
self.indexes = [
|
||||
[ ] # no db with index 0
|
||||
, [ ] # no db with index 1
|
||||
, [ # indexes for mysql (list index 2)
|
||||
{'tab':'Players', 'col':'name', 'drop':0}
|
||||
, {'tab':'Hands', 'col':'siteHandNo', 'drop':0}
|
||||
, {'tab':'Tourneys', 'col':'siteTourneyNo', 'drop':0}
|
||||
]
|
||||
, [ # indexes for postgres (list index 3)
|
||||
{'tab':'Boardcards', 'col':'handId', 'drop':0}
|
||||
, {'tab':'Gametypes', 'col':'siteId', 'drop':0}
|
||||
, {'tab':'Hands', 'col':'gametypeId', 'drop':0} # mct 22/3/09
|
||||
, {'tab':'Hands', 'col':'siteHandNo', 'drop':0}
|
||||
, {'tab':'HandsActions', 'col':'handsPlayerId', 'drop':0}
|
||||
, {'tab':'HandsPlayers', 'col':'handId', 'drop':1}
|
||||
, {'tab':'HandsPlayers', 'col':'playerId', 'drop':1}
|
||||
, {'tab':'HandsPlayers', 'col':'tourneysPlayersId', 'drop':0}
|
||||
, {'tab':'HudCache', 'col':'gametypeId', 'drop':1}
|
||||
, {'tab':'HudCache', 'col':'playerId', 'drop':0}
|
||||
, {'tab':'HudCache', 'col':'tourneyTypeId', 'drop':0}
|
||||
, {'tab':'Players', 'col':'siteId', 'drop':1}
|
||||
, {'tab':'Players', 'col':'name', 'drop':0}
|
||||
, {'tab':'Tourneys', 'col':'tourneyTypeId', 'drop':1}
|
||||
, {'tab':'Tourneys', 'col':'siteTourneyNo', 'drop':0}
|
||||
, {'tab':'TourneysPlayers', 'col':'playerId', 'drop':0}
|
||||
, {'tab':'TourneysPlayers', 'col':'tourneyId', 'drop':0}
|
||||
, {'tab':'TourneyTypes', 'col':'siteId', 'drop':0}
|
||||
]
|
||||
, [ # indexes for sqlite (list index 4)
|
||||
]
|
||||
]
|
||||
|
||||
self.foreignKeys = [
|
||||
[ ] # no db with index 0
|
||||
, [ ] # no db with index 1
|
||||
, [ # foreign keys for mysql
|
||||
{'fktab':'Hands', 'fkcol':'gametypeId', 'rtab':'Gametypes', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsPlayers', 'fkcol':'handId', 'rtab':'Hands', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsPlayers', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsActions', 'fkcol':'handsPlayerId', 'rtab':'HandsPlayers', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HudCache', 'fkcol':'gametypeId', 'rtab':'Gametypes', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HudCache', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':0}
|
||||
, {'fktab':'HudCache', 'fkcol':'tourneyTypeId', 'rtab':'TourneyTypes', 'rcol':'id', 'drop':1}
|
||||
]
|
||||
, [ # foreign keys for postgres
|
||||
{'fktab':'Hands', 'fkcol':'gametypeId', 'rtab':'Gametypes', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsPlayers', 'fkcol':'handId', 'rtab':'Hands', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsPlayers', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HandsActions', 'fkcol':'handsPlayerId', 'rtab':'HandsPlayers', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HudCache', 'fkcol':'gametypeId', 'rtab':'Gametypes', 'rcol':'id', 'drop':1}
|
||||
, {'fktab':'HudCache', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':0}
|
||||
, {'fktab':'HudCache', 'fkcol':'tourneyTypeId', 'rtab':'TourneyTypes', 'rcol':'id', 'drop':1}
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
# MySQL Notes:
|
||||
# "FOREIGN KEY (handId) REFERENCES Hands(id)" - requires index on Hands.id
|
||||
# - creates index handId on <thistable>.handId
|
||||
# alter table t drop foreign key fk
|
||||
# alter table t add foreign key (fkcol) references tab(rcol)
|
||||
# alter table t add constraint c foreign key (fkcol) references tab(rcol)
|
||||
# (fkcol is used for foreigh key name)
|
||||
|
||||
# mysql to list indexes:
|
||||
# SELECT table_name, index_name, non_unique, column_name
|
||||
# FROM INFORMATION_SCHEMA.STATISTICS
|
||||
# WHERE table_name = 'tbl_name'
|
||||
# AND table_schema = 'db_name'
|
||||
# ORDER BY table_name, index_name, seq_in_index
|
||||
#
|
||||
# ALTER TABLE Tourneys ADD INDEX siteTourneyNo(siteTourneyNo)
|
||||
# ALTER TABLE tab DROP INDEX idx
|
||||
|
||||
# mysql to list fks:
|
||||
# SELECT constraint_name, table_name, column_name, referenced_table_name, referenced_column_name
|
||||
# FROM information_schema.KEY_COLUMN_USAGE
|
||||
# WHERE REFERENCED_TABLE_SCHEMA = (your schema name here)
|
||||
# AND REFERENCED_TABLE_NAME is not null
|
||||
# ORDER BY TABLE_NAME, COLUMN_NAME;
|
||||
|
||||
# this may indicate missing object
|
||||
# _mysql_exceptions.OperationalError: (1025, "Error on rename of '.\\fpdb\\hands' to '.\\fpdb\\#sql2-7f0-1b' (errno: 152)")
|
||||
|
||||
|
||||
# PG notes:
|
||||
|
||||
# To add a foreign key constraint to a table:
|
||||
# ALTER TABLE tab ADD CONSTRAINT c FOREIGN KEY (col) REFERENCES t2(col2) MATCH FULL;
|
||||
# ALTER TABLE tab DROP CONSTRAINT zipchk
|
||||
#
|
||||
# Note: index names must be unique across a schema
|
||||
# CREATE INDEX idx ON tab(col)
|
||||
# DROP INDEX idx
|
||||
#end def __init__
|
||||
|
||||
def do_connect(self, config=None):
|
||||
|
@ -244,80 +138,6 @@ class fpdb_db:
|
|||
#print "started fpdb_db.reconnect"
|
||||
self.disconnect(due_to_error)
|
||||
self.connect(self.backend, self.host, self.database, self.user, self.password)
|
||||
|
||||
def create_tables(self):
|
||||
#todo: should detect and fail gracefully if tables already exist.
|
||||
try:
|
||||
logging.debug(self.sql.query['createSettingsTable'])
|
||||
self.cursor.execute(self.sql.query['createSettingsTable'])
|
||||
logging.debug(self.sql.query['createSitesTable'])
|
||||
self.cursor.execute(self.sql.query['createSitesTable'])
|
||||
self.cursor.execute(self.sql.query['createGametypesTable'])
|
||||
self.cursor.execute(self.sql.query['createPlayersTable'])
|
||||
self.cursor.execute(self.sql.query['createAutoratesTable'])
|
||||
self.cursor.execute(self.sql.query['createHandsTable'])
|
||||
self.cursor.execute(self.sql.query['createTourneyTypesTable'])
|
||||
self.cursor.execute(self.sql.query['createTourneysTable'])
|
||||
self.cursor.execute(self.sql.query['createTourneysPlayersTable'])
|
||||
self.cursor.execute(self.sql.query['createHandsPlayersTable'])
|
||||
#self.cursor.execute(self.sql.query['createHandsActionsTable'])
|
||||
self.cursor.execute(self.sql.query['createHudCacheTable'])
|
||||
#self.cursor.execute(self.sql.query['addTourneyIndex'])
|
||||
#self.cursor.execute(self.sql.query['addHandsIndex'])
|
||||
#self.cursor.execute(self.sql.query['addPlayersIndex'])
|
||||
self.fillDefaultData()
|
||||
self.db.commit()
|
||||
except:
|
||||
print "err: ", str(sys.exc_value)
|
||||
self.db.rollback()
|
||||
raise fpdb_simple.FpdbError( "Error creating tables " + str(sys.exc_value) )
|
||||
#end def disconnect
|
||||
|
||||
def drop_tables(self):
|
||||
"""Drops the fpdb tables from the current db"""
|
||||
|
||||
if(self.get_backend_name() == 'MySQL InnoDB'):
|
||||
#Databases with FOREIGN KEY support need this switched of before you can drop tables
|
||||
self.drop_referential_integrity()
|
||||
|
||||
# Query the DB to see what tables exist
|
||||
self.cursor.execute(self.sql.query['list_tables'])
|
||||
for table in self.cursor:
|
||||
self.cursor.execute(self.sql.query['drop_table'] + table[0])
|
||||
elif(self.get_backend_name() == 'PostgreSQL'):
|
||||
self.db.commit()# I have no idea why this makes the query work--REB 07OCT2008
|
||||
self.cursor.execute(self.sql.query['list_tables'])
|
||||
tables = self.cursor.fetchall()
|
||||
for table in tables:
|
||||
self.cursor.execute(self.sql.query['drop_table'] + table[0] + ' cascade')
|
||||
elif(self.get_backend_name() == 'SQLite'):
|
||||
self.cursor.execute(self.sql.query['list_tables'])
|
||||
for table in self.cursor.fetchall():
|
||||
logging.debug(self.sql.query['drop_table'] + table[0])
|
||||
self.cursor.execute(self.sql.query['drop_table'] + table[0])
|
||||
|
||||
self.db.commit()
|
||||
#end def drop_tables
|
||||
|
||||
def drop_referential_integrity(self):
|
||||
"""Update all tables to remove foreign keys"""
|
||||
|
||||
self.cursor.execute(self.sql.query['list_tables'])
|
||||
result = self.cursor.fetchall()
|
||||
|
||||
for i in range(len(result)):
|
||||
self.cursor.execute("SHOW CREATE TABLE " + result[i][0])
|
||||
inner = self.cursor.fetchall()
|
||||
|
||||
for j in range(len(inner)):
|
||||
# result[i][0] - Table name
|
||||
# result[i][1] - CREATE TABLE parameters
|
||||
#Searching for CONSTRAINT `tablename_ibfk_1`
|
||||
for m in re.finditer('(ibfk_[0-9]+)', inner[j][1]):
|
||||
key = "`" + inner[j][0] + "_" + m.group() + "`"
|
||||
self.cursor.execute("ALTER TABLE " + inner[j][0] + " DROP FOREIGN KEY " + key)
|
||||
self.db.commit()
|
||||
#end drop_referential_inegrity
|
||||
|
||||
def get_backend_name(self):
|
||||
"""Returns the name of the currently used backend"""
|
||||
|
@ -334,258 +154,6 @@ class fpdb_db:
|
|||
def get_db_info(self):
|
||||
return (self.host, self.database, self.user, self.password)
|
||||
#end def get_db_info
|
||||
|
||||
def fillDefaultData(self):
|
||||
self.cursor.execute("INSERT INTO Settings (version) VALUES (118);")
|
||||
self.cursor.execute("INSERT INTO Sites (name,currency) VALUES ('Full Tilt Poker', 'USD')")
|
||||
self.cursor.execute("INSERT INTO Sites (name,currency) VALUES ('PokerStars', 'USD')")
|
||||
self.cursor.execute("INSERT INTO Sites (name,currency) VALUES ('Everleaf', 'USD')")
|
||||
self.cursor.execute("INSERT INTO Sites (name,currency) VALUES ('Win2day', 'USD')")
|
||||
self.cursor.execute("INSERT INTO TourneyTypes VALUES (DEFAULT, 1, 0, 0, 0, False);")
|
||||
#self.cursor.execute("""INSERT INTO TourneyTypes
|
||||
# (siteId,buyin,fee,knockout,rebuyOrAddon) VALUES
|
||||
# (1,0,0,0,?)""",(False,) )
|
||||
#end def fillDefaultData
|
||||
|
||||
def recreate_tables(self):
|
||||
"""(Re-)creates the tables of the current DB"""
|
||||
|
||||
self.drop_tables()
|
||||
self.create_tables()
|
||||
self.createAllIndexes()
|
||||
self.db.commit()
|
||||
print "Finished recreating tables"
|
||||
#end def recreate_tables
|
||||
|
||||
def prepareBulkImport(self):
|
||||
"""Drop some indexes/foreign keys to prepare for bulk import.
|
||||
Currently keeping the standalone indexes as needed to import quickly"""
|
||||
stime = time()
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
self.cursor.execute("SET foreign_key_checks=0")
|
||||
self.cursor.execute("SET autocommit=0")
|
||||
return
|
||||
if self.backend == self.PGSQL:
|
||||
self.db.set_isolation_level(0) # allow table/index operations to work
|
||||
for fk in self.foreignKeys[self.backend]:
|
||||
if fk['drop'] == 1:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
self.cursor.execute("SELECT constraint_name " +
|
||||
"FROM information_schema.KEY_COLUMN_USAGE " +
|
||||
#"WHERE REFERENCED_TABLE_SCHEMA = 'fpdb'
|
||||
"WHERE 1=1 " +
|
||||
"AND table_name = %s AND column_name = %s " +
|
||||
"AND referenced_table_name = %s " +
|
||||
"AND referenced_column_name = %s ",
|
||||
(fk['fktab'], fk['fkcol'], fk['rtab'], fk['rcol']) )
|
||||
cons = self.cursor.fetchone()
|
||||
#print "preparebulk: cons=", cons
|
||||
if cons:
|
||||
print "dropping mysql fk", cons[0], fk['fktab'], fk['fkcol']
|
||||
try:
|
||||
self.cursor.execute("alter table " + fk['fktab'] + " drop foreign key " + cons[0])
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
# DON'T FORGET TO RECREATE THEM!!
|
||||
print "dropping pg fk", fk['fktab'], fk['fkcol']
|
||||
try:
|
||||
# try to lock table to see if index drop will work:
|
||||
# hmmm, tested by commenting out rollback in grapher. lock seems to work but
|
||||
# then drop still hangs :-( does work in some tests though??
|
||||
# will leave code here for now pending further tests/enhancement ...
|
||||
self.cursor.execute( "lock table %s in exclusive mode nowait" % (fk['fktab'],) )
|
||||
#print "after lock, status:", self.cursor.statusmessage
|
||||
#print "alter table %s drop constraint %s_%s_fkey" % (fk['fktab'], fk['fktab'], fk['fkcol'])
|
||||
try:
|
||||
self.cursor.execute("alter table %s drop constraint %s_%s_fkey" % (fk['fktab'], fk['fktab'], fk['fkcol']))
|
||||
print "dropped pg fk pg fk %s_%s_fkey, continuing ..." % (fk['fktab'], fk['fkcol'])
|
||||
except:
|
||||
if "does not exist" not in str(sys.exc_value):
|
||||
print "warning: drop pg fk %s_%s_fkey failed: %s, continuing ..." \
|
||||
% (fk['fktab'], fk['fkcol'], str(sys.exc_value).rstrip('\n') )
|
||||
except:
|
||||
print "warning: constraint %s_%s_fkey not dropped: %s, continuing ..." \
|
||||
% (fk['fktab'],fk['fkcol'], str(sys.exc_value).rstrip('\n'))
|
||||
else:
|
||||
print "Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
|
||||
for idx in self.indexes[self.backend]:
|
||||
if idx['drop'] == 1:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
print "dropping mysql index ", idx['tab'], idx['col']
|
||||
try:
|
||||
# apparently nowait is not implemented in mysql so this just hands if there are locks
|
||||
# preventing the index drop :-(
|
||||
self.cursor.execute( "alter table %s drop index %s", (idx['tab'],idx['col']) )
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
# DON'T FORGET TO RECREATE THEM!!
|
||||
print "dropping pg index ", idx['tab'], idx['col']
|
||||
try:
|
||||
# try to lock table to see if index drop will work:
|
||||
self.cursor.execute( "lock table %s in exclusive mode nowait" % (idx['tab'],) )
|
||||
#print "after lock, status:", self.cursor.statusmessage
|
||||
try:
|
||||
# table locked ok so index drop should work:
|
||||
#print "drop index %s_%s_idx" % (idx['tab'],idx['col'])
|
||||
self.cursor.execute( "drop index if exists %s_%s_idx" % (idx['tab'],idx['col']) )
|
||||
#print "dropped pg index ", idx['tab'], idx['col']
|
||||
except:
|
||||
if "does not exist" not in str(sys.exc_value):
|
||||
print "warning: drop index %s_%s_idx failed: %s, continuing ..." \
|
||||
% (idx['tab'],idx['col'], str(sys.exc_value).rstrip('\n'))
|
||||
except:
|
||||
print "warning: index %s_%s_idx not dropped %s, continuing ..." \
|
||||
% (idx['tab'],idx['col'], str(sys.exc_value).rstrip('\n'))
|
||||
else:
|
||||
print "Error: Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
|
||||
if self.backend == self.PGSQL:
|
||||
self.db.set_isolation_level(1) # go back to normal isolation level
|
||||
self.db.commit() # seems to clear up errors if there were any in postgres
|
||||
ptime = time() - stime
|
||||
print "prepare import took", ptime, "seconds"
|
||||
#end def prepareBulkImport
|
||||
|
||||
def afterBulkImport(self):
|
||||
"""Re-create any dropped indexes/foreign keys after bulk import"""
|
||||
stime = time()
|
||||
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
self.cursor.execute("SET foreign_key_checks=1")
|
||||
self.cursor.execute("SET autocommit=1")
|
||||
return
|
||||
|
||||
if self.backend == self.PGSQL:
|
||||
self.db.set_isolation_level(0) # allow table/index operations to work
|
||||
for fk in self.foreignKeys[self.backend]:
|
||||
if fk['drop'] == 1:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
self.cursor.execute("SELECT constraint_name " +
|
||||
"FROM information_schema.KEY_COLUMN_USAGE " +
|
||||
#"WHERE REFERENCED_TABLE_SCHEMA = 'fpdb'
|
||||
"WHERE 1=1 " +
|
||||
"AND table_name = %s AND column_name = %s " +
|
||||
"AND referenced_table_name = %s " +
|
||||
"AND referenced_column_name = %s ",
|
||||
(fk['fktab'], fk['fkcol'], fk['rtab'], fk['rcol']) )
|
||||
cons = self.cursor.fetchone()
|
||||
#print "afterbulk: cons=", cons
|
||||
if cons:
|
||||
pass
|
||||
else:
|
||||
print "creating fk ", fk['fktab'], fk['fkcol'], "->", fk['rtab'], fk['rcol']
|
||||
try:
|
||||
self.cursor.execute("alter table " + fk['fktab'] + " add foreign key ("
|
||||
+ fk['fkcol'] + ") references " + fk['rtab'] + "("
|
||||
+ fk['rcol'] + ")")
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
print "creating fk ", fk['fktab'], fk['fkcol'], "->", fk['rtab'], fk['rcol']
|
||||
try:
|
||||
self.cursor.execute("alter table " + fk['fktab'] + " add constraint "
|
||||
+ fk['fktab'] + '_' + fk['fkcol'] + '_fkey'
|
||||
+ " foreign key (" + fk['fkcol']
|
||||
+ ") references " + fk['rtab'] + "(" + fk['rcol'] + ")")
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
print "Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
|
||||
for idx in self.indexes[self.backend]:
|
||||
if idx['drop'] == 1:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
print "creating mysql index ", idx['tab'], idx['col']
|
||||
try:
|
||||
self.cursor.execute( "alter table %s add index %s(%s)"
|
||||
, (idx['tab'],idx['col'],idx['col']) )
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
# pass
|
||||
# mod to use tab_col for index name?
|
||||
print "creating pg index ", idx['tab'], idx['col']
|
||||
try:
|
||||
print "create index %s_%s_idx on %s(%s)" % (idx['tab'], idx['col'], idx['tab'], idx['col'])
|
||||
self.cursor.execute( "create index %s_%s_idx on %s(%s)"
|
||||
% (idx['tab'], idx['col'], idx['tab'], idx['col']) )
|
||||
except:
|
||||
print " ERROR! :-("
|
||||
pass
|
||||
else:
|
||||
print "Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
|
||||
if self.backend == self.PGSQL:
|
||||
self.db.set_isolation_level(1) # go back to normal isolation level
|
||||
self.db.commit() # seems to clear up errors if there were any in postgres
|
||||
atime = time() - stime
|
||||
print "After import took", atime, "seconds"
|
||||
#end def afterBulkImport
|
||||
|
||||
def createAllIndexes(self):
|
||||
"""Create new indexes"""
|
||||
if self.backend == self.PGSQL:
|
||||
self.db.set_isolation_level(0) # allow table/index operations to work
|
||||
for idx in self.indexes[self.backend]:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
print "creating mysql index ", idx['tab'], idx['col']
|
||||
try:
|
||||
self.cursor.execute( "alter table %s add index %s(%s)"
|
||||
, (idx['tab'],idx['col'],idx['col']) )
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
# mod to use tab_col for index name?
|
||||
print "creating pg index ", idx['tab'], idx['col']
|
||||
try:
|
||||
print "create index %s_%s_idx on %s(%s)" % (idx['tab'], idx['col'], idx['tab'], idx['col'])
|
||||
self.cursor.execute( "create index %s_%s_idx on %s(%s)"
|
||||
% (idx['tab'], idx['col'], idx['tab'], idx['col']) )
|
||||
except:
|
||||
print " ERROR! :-("
|
||||
pass
|
||||
else:
|
||||
print "Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
if self.backend == self.PGSQL:
|
||||
self.db.set_isolation_level(1) # go back to normal isolation level
|
||||
#end def createAllIndexes
|
||||
|
||||
def dropAllIndexes(self):
|
||||
"""Drop all standalone indexes (i.e. not including primary keys or foreign keys)
|
||||
using list of indexes in indexes data structure"""
|
||||
# maybe upgrade to use data dictionary?? (but take care to exclude PK and FK)
|
||||
if self.backend == self.PGSQL:
|
||||
self.db.set_isolation_level(0) # allow table/index operations to work
|
||||
for idx in self.indexes[self.backend]:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
print "dropping mysql index ", idx['tab'], idx['col']
|
||||
try:
|
||||
self.cursor.execute( "alter table %s drop index %s"
|
||||
, (idx['tab'],idx['col']) )
|
||||
except:
|
||||
pass
|
||||
elif self.backend == self.PGSQL:
|
||||
print "dropping pg index ", idx['tab'], idx['col']
|
||||
# mod to use tab_col for index name?
|
||||
try:
|
||||
self.cursor.execute( "drop index %s_%s_idx"
|
||||
% (idx['tab'],idx['col']) )
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
print "Only MySQL and Postgres supported so far"
|
||||
return -1
|
||||
if self.backend == self.PGSQL:
|
||||
self.db.set_isolation_level(1) # go back to normal isolation level
|
||||
#end def dropAllIndexes
|
||||
|
||||
def getLastInsertId(self):
|
||||
try:
|
||||
|
|
|
@ -60,8 +60,6 @@ class Importer:
|
|||
self.caller = caller
|
||||
self.config = config
|
||||
self.database = None # database will be the main db interface eventually
|
||||
self.fdb = None # fdb may disappear or just hold the simple db connection
|
||||
self.cursor = None
|
||||
self.filelist = {}
|
||||
self.dirlist = {}
|
||||
self.siteIds = {}
|
||||
|
@ -79,12 +77,9 @@ class Importer:
|
|||
self.settings.setdefault("handCount", 0)
|
||||
|
||||
self.database = Database.Database(self.config) # includes .connection and .sql variables
|
||||
self.fdb = fpdb_db.fpdb_db() # sets self.fdb.db self.fdb.cursor and self.fdb.sql
|
||||
self.fdb.do_connect(self.config)
|
||||
self.fdb.db.rollback() # make sure all locks are released
|
||||
|
||||
self.NEWIMPORT = False
|
||||
self.allow_hudcache_rebuild = False;
|
||||
self.allow_hudcache_rebuild = False
|
||||
|
||||
#Set functions
|
||||
def setCallHud(self, value):
|
||||
|
@ -123,8 +118,7 @@ class Importer:
|
|||
self.filelist[filename] = [site] + [filter]
|
||||
if site not in self.siteIds:
|
||||
# Get id from Sites table in DB
|
||||
self.fdb.cursor.execute(self.fdb.sql.query['getSiteId'], (site,))
|
||||
result = self.fdb.cursor.fetchall()
|
||||
result = self.database.get_site_id(site)
|
||||
if len(result) == 1:
|
||||
self.siteIds[site] = result[0][0]
|
||||
else:
|
||||
|
@ -178,7 +172,7 @@ class Importer:
|
|||
self.settings['dropHudCache'] = self.calculate_auto2(25.0, 500.0) # returns "drop"/"don't drop"
|
||||
|
||||
if self.settings['dropIndexes'] == 'drop':
|
||||
self.fdb.prepareBulkImport()
|
||||
self.database.prepareBulkImport()
|
||||
else:
|
||||
print "No need to drop indexes."
|
||||
#print "dropInd =", self.settings['dropIndexes'], " dropHudCache =", self.settings['dropHudCache']
|
||||
|
@ -196,7 +190,7 @@ class Importer:
|
|||
toterrors += errors
|
||||
tottime += ttime
|
||||
if self.settings['dropIndexes'] == 'drop':
|
||||
self.fdb.afterBulkImport()
|
||||
self.database.afterBulkImport()
|
||||
else:
|
||||
print "No need to rebuild indexes."
|
||||
if self.allow_hudcache_rebuild and self.settings['dropHudCache'] == 'drop':
|
||||
|
@ -212,7 +206,7 @@ class Importer:
|
|||
if len(self.filelist) == 1: return "don't drop"
|
||||
if 'handsInDB' not in self.settings:
|
||||
try:
|
||||
tmpcursor = self.fdb.db.cursor()
|
||||
tmpcursor = self.database.get_cursor()
|
||||
tmpcursor.execute("Select count(1) from Hands;")
|
||||
self.settings['handsInDB'] = tmpcursor.fetchone()[0]
|
||||
except:
|
||||
|
@ -235,7 +229,7 @@ class Importer:
|
|||
# get number of hands in db
|
||||
if 'handsInDB' not in self.settings:
|
||||
try:
|
||||
tmpcursor = self.fdb.db.cursor()
|
||||
tmpcursor = self.database.get_cursor()
|
||||
tmpcursor.execute("Select count(1) from Hands;")
|
||||
self.settings['handsInDB'] = tmpcursor.fetchone()[0]
|
||||
except:
|
||||
|
@ -299,12 +293,13 @@ class Importer:
|
|||
|
||||
self.addToDirList = {}
|
||||
self.removeFromFileList = {}
|
||||
self.fdb.db.rollback()
|
||||
self.database.rollback()
|
||||
#rulog.writelines(" finished\n")
|
||||
#rulog.close()
|
||||
|
||||
# This is now an internal function that should not be called directly.
|
||||
def import_file_dict(self, file, site, filter):
|
||||
#print "import_file_dict"
|
||||
if os.path.isdir(file):
|
||||
self.addToDirList[file] = [site] + [filter]
|
||||
return
|
||||
|
@ -350,6 +345,7 @@ class Importer:
|
|||
|
||||
|
||||
def import_fpdb_file(self, file, site):
|
||||
#print "import_fpdb_file"
|
||||
starttime = time()
|
||||
last_read_hand = 0
|
||||
loc = 0
|
||||
|
@ -379,8 +375,7 @@ class Importer:
|
|||
self.pos_in_file[file] = inputFile.tell()
|
||||
inputFile.close()
|
||||
|
||||
# fix fdb and database cursors before using this:
|
||||
#self.database.lock_for_insert() # ok when using one thread
|
||||
#self.database.lock_for_insert() # should be ok when using one thread
|
||||
|
||||
try: # sometimes we seem to be getting an empty self.lines, in which case, we just want to return.
|
||||
firstline = self.lines[0]
|
||||
|
@ -423,10 +418,10 @@ class Importer:
|
|||
self.hand=hand
|
||||
|
||||
try:
|
||||
handsId = fpdb_parse_logic.mainParser( self.settings, self.fdb
|
||||
handsId = fpdb_parse_logic.mainParser( self.settings
|
||||
, self.siteIds[site], category, hand
|
||||
, self.config, self.database )
|
||||
self.fdb.db.commit()
|
||||
self.database.commit()
|
||||
|
||||
stored += 1
|
||||
if self.callHud:
|
||||
|
@ -436,23 +431,23 @@ class Importer:
|
|||
self.caller.pipe_to_hud.stdin.write("%s" % (handsId) + os.linesep)
|
||||
except fpdb_simple.DuplicateError:
|
||||
duplicates += 1
|
||||
self.fdb.db.rollback()
|
||||
self.database.rollback()
|
||||
except (ValueError), fe:
|
||||
errors += 1
|
||||
self.printEmailErrorMessage(errors, file, hand)
|
||||
|
||||
if (self.settings['failOnError']):
|
||||
self.fdb.db.commit() #dont remove this, in case hand processing was cancelled.
|
||||
self.database.commit() #dont remove this, in case hand processing was cancelled.
|
||||
raise
|
||||
else:
|
||||
self.fdb.db.rollback()
|
||||
self.database.rollback()
|
||||
except (fpdb_simple.FpdbError), fe:
|
||||
errors += 1
|
||||
self.printEmailErrorMessage(errors, file, hand)
|
||||
self.fdb.db.rollback()
|
||||
self.database.rollback()
|
||||
|
||||
if self.settings['failOnError']:
|
||||
self.fdb.db.commit() #dont remove this, in case hand processing was cancelled.
|
||||
self.database.commit() #dont remove this, in case hand processing was cancelled.
|
||||
raise
|
||||
|
||||
if self.settings['minPrint']:
|
||||
|
@ -479,7 +474,7 @@ class Importer:
|
|||
print "failed to read a single hand from file:", inputFile
|
||||
handsId=0
|
||||
#todo: this will cause return of an unstored hand number if the last hand was error
|
||||
self.fdb.db.commit()
|
||||
self.database.commit()
|
||||
self.handsId=handsId
|
||||
return (stored, duplicates, partial, errors, ttime)
|
||||
|
||||
|
|
|
@ -22,14 +22,13 @@ import Database
|
|||
from time import time, strftime
|
||||
|
||||
#parses a holdem hand
|
||||
def mainParser(settings, fdb, siteID, category, hand, config, db = None):
|
||||
def mainParser(settings, siteID, category, hand, config, db = None):
|
||||
# fdb is not used now - to be removed ...
|
||||
t0 = time()
|
||||
#print "mainparser"
|
||||
backend = settings['db-backend']
|
||||
if db == None:
|
||||
#This is redundant - hopefully fdb will be a Database object in an iteration soon
|
||||
db = Database.Database(c = config, sql = None)
|
||||
else:
|
||||
db = db
|
||||
category = fpdb_simple.recogniseCategory(hand[0])
|
||||
|
||||
base = "hold" if category == "holdem" or category == "omahahi" or category == "omahahilo" else "stud"
|
||||
|
@ -54,7 +53,7 @@ def mainParser(settings, fdb, siteID, category, hand, config, db = None):
|
|||
break
|
||||
#print "small blind line:",smallBlindLine
|
||||
|
||||
gametypeID = fpdb_simple.recogniseGametypeID(backend, fdb.db, fdb.cursor, hand[0], hand[smallBlindLine], siteID, category, isTourney)
|
||||
gametypeID = fpdb_simple.recogniseGametypeID(backend, db, db.get_cursor(), hand[0], hand[smallBlindLine], siteID, category, isTourney)
|
||||
if isTourney:
|
||||
siteTourneyNo = fpdb_simple.parseTourneyNo(hand[0])
|
||||
buyin = fpdb_simple.parseBuyin(hand[0])
|
||||
|
@ -65,9 +64,9 @@ def mainParser(settings, fdb, siteID, category, hand, config, db = None):
|
|||
tourneyStartTime= handStartTime #todo: read tourney start time
|
||||
rebuyOrAddon = fpdb_simple.isRebuyOrAddon(hand[0])
|
||||
|
||||
tourneyTypeId = fpdb_simple.recogniseTourneyTypeId(fdb.cursor, siteID, buyin, fee, knockout, rebuyOrAddon)
|
||||
tourneyTypeId = fpdb_simple.recogniseTourneyTypeId(db.get_cursor(), siteID, buyin, fee, knockout, rebuyOrAddon)
|
||||
|
||||
fpdb_simple.isAlreadyInDB(fdb.cursor, gametypeID, siteHandNo)
|
||||
fpdb_simple.isAlreadyInDB(db.get_cursor(), gametypeID, siteHandNo)
|
||||
|
||||
hand = fpdb_simple.filterCrap(hand, isTourney)
|
||||
|
||||
|
@ -81,7 +80,7 @@ def mainParser(settings, fdb, siteID, category, hand, config, db = None):
|
|||
seatLines.append(line)
|
||||
|
||||
names = fpdb_simple.parseNames(seatLines)
|
||||
playerIDs = fpdb_simple.recognisePlayerIDs(fdb.cursor, names, siteID) # inserts players as needed
|
||||
playerIDs = fpdb_simple.recognisePlayerIDs(db.get_cursor(), names, siteID) # inserts players as needed
|
||||
tmp = fpdb_simple.parseCashesAndSeatNos(seatLines)
|
||||
startCashes = tmp['startCashes']
|
||||
seatNos = tmp['seatNos']
|
||||
|
@ -128,8 +127,9 @@ def mainParser(settings, fdb, siteID, category, hand, config, db = None):
|
|||
fpdb_simple.convertBlindBet(actionTypes, actionAmounts)
|
||||
fpdb_simple.checkPositions(positions)
|
||||
|
||||
fdb.cursor.execute("SELECT limitType FROM Gametypes WHERE id=%s",(gametypeID, ))
|
||||
limit_type = fdb.cursor.fetchone()[0]
|
||||
c = db.get_cursor()
|
||||
c.execute("SELECT limitType FROM Gametypes WHERE id=%s",(gametypeID, ))
|
||||
limit_type = c.fetchone()[0]
|
||||
fpdb_simple.convert3B4B(category, limit_type, actionTypes, actionAmounts)
|
||||
|
||||
totalWinnings = sum(winnings)
|
||||
|
@ -148,7 +148,7 @@ def mainParser(settings, fdb, siteID, category, hand, config, db = None):
|
|||
|
||||
#print "parse: hand data prepared" # only reads up to here apart from inserting new players
|
||||
try:
|
||||
fdb.db.commit() # need to commit new players as different db connection used
|
||||
db.commit() # need to commit new players as different db connection used
|
||||
# for other writes. maybe this will change maybe not ...
|
||||
except:
|
||||
print "parse: error during rollback: " + str(sys.exc_value)
|
||||
|
|
|
@ -983,7 +983,7 @@ def recogniseGametypeID(backend, db, cursor, topline, smallBlindLine, site_id, c
|
|||
#AND limitType=%s AND smallBlind=%s AND bigBlind=%s", (site_id, type, category, limit_type, small_bet, big_bet))
|
||||
|
||||
#result=(db.insert_id(),)
|
||||
result=(getLastInsertId(backend,db,cursor),)
|
||||
result=(db.get_last_insert_id(),)
|
||||
|
||||
return result[0]
|
||||
#end def recogniseGametypeID
|
||||
|
|
Loading…
Reference in New Issue
Block a user