diff --git a/pyfpdb/Database.py b/pyfpdb/Database.py
index be5cd955..6340660d 100644
--- a/pyfpdb/Database.py
+++ b/pyfpdb/Database.py
@@ -125,7 +125,8 @@ class Database:
{'tab':'Gametypes', 'col':'siteId', 'drop':0}
, {'tab':'Hands', 'col':'gametypeId', 'drop':0} # mct 22/3/09
#, {'tab':'Hands', 'col':'siteHandNo', 'drop':0} unique indexes not dropped
- , {'tab':'HandsActions', 'col':'handsPlayerId', 'drop':0}
+ , {'tab':'HandsActions', 'col':'handId', 'drop':1}
+ , {'tab':'HandsActions', 'col':'playerId', 'drop':1}
, {'tab':'HandsActions', 'col':'actionId', 'drop':1}
, {'tab':'HandsPlayers', 'col':'handId', 'drop':1}
, {'tab':'HandsPlayers', 'col':'playerId', 'drop':1}
@@ -150,7 +151,8 @@ class Database:
, {'tab':'HandsPlayers', 'col':'handId', 'drop':0}
, {'tab':'HandsPlayers', 'col':'playerId', 'drop':0}
, {'tab':'HandsPlayers', 'col':'tourneysPlayersId', 'drop':0}
- , {'tab':'HandsActions', 'col':'handsPlayerId', 'drop':0}
+ , {'tab':'HandsActions', 'col':'handId', 'drop':0}
+ , {'tab':'HandsActions', 'col':'playerId', 'drop':0}
, {'tab':'HandsActions', 'col':'actionId', 'drop':1}
, {'tab':'HudCache', 'col':'gametypeId', 'drop':1}
, {'tab':'HudCache', 'col':'playerId', 'drop':0}
@@ -174,7 +176,8 @@ class Database:
, {'fktab':'HandsPlayers', 'fkcol':'handId', 'rtab':'Hands', 'rcol':'id', 'drop':1}
, {'fktab':'HandsPlayers', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':1}
, {'fktab':'HandsPlayers', 'fkcol':'tourneysPlayersId','rtab':'TourneysPlayers','rcol':'id', 'drop':1}
- , {'fktab':'HandsActions', 'fkcol':'handsPlayerId', 'rtab':'HandsPlayers', 'rcol':'id', 'drop':1}
+ , {'fktab':'HandsActions', 'fkcol':'handId', 'rtab':'Hands', 'rcol':'id', 'drop':1}
+ , {'fktab':'HandsActions', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':1}
, {'fktab':'HandsActions', 'fkcol':'actionId', 'rtab':'Actions', 'rcol':'id', 'drop':1}
, {'fktab':'HudCache', 'fkcol':'gametypeId', 'rtab':'Gametypes', 'rcol':'id', 'drop':1}
, {'fktab':'HudCache', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':0}
@@ -184,7 +187,8 @@ class Database:
{'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':'HandsActions', 'fkcol':'handId', 'rtab':'Hands', 'rcol':'id', 'drop':1}
+ , {'fktab':'HandsActions', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':1}
, {'fktab':'HandsActions', 'fkcol':'actionId', 'rtab':'Actions', 'rcol':'id', 'drop':1}
, {'fktab':'HudCache', 'fkcol':'gametypeId', 'rtab':'Gametypes', 'rcol':'id', 'drop':1}
, {'fktab':'HudCache', 'fkcol':'playerId', 'rtab':'Players', 'rcol':'id', 'drop':0}
@@ -1727,10 +1731,11 @@ class Database:
c.execute(q, (
p['tableName'],
- p['gametypeId'],
p['siteHandNo'],
p['tourneyId'],
- p['startTime'],
+ p['gametypeId'],
+ p['sessionId'],
+ p['startTime'],
datetime.utcnow(), #importtime
p['seats'],
p['maxSeats'],
@@ -1760,7 +1765,7 @@ class Database:
return self.get_last_insert_id(c)
# def storeHand
- def storeHandsPlayers(self, hid, pids, pdata, printdata = False):
+ def storeHandsPlayers(self, hid, pids, pdata, hp_bulk = None, insert = False, printdata = False):
#print "DEBUG: %s %s %s" %(hid, pids, pdata)
if printdata:
import pprint
@@ -1768,7 +1773,6 @@ class Database:
pp.pprint(pdata)
inserts = []
- hpid = {}
for p in pdata:
inserts.append( (hid,
pids[p],
@@ -1874,23 +1878,16 @@ class Database:
pdata[p]['street4Raises']
) )
- q = self.sql.query['store_hands_players']
- q = q.replace('%s', self.sql.query['placeholder'])
+ if insert:
+ hp_bulk += inserts
+ q = self.sql.query['store_hands_players']
+ q = q.replace('%s', self.sql.query['placeholder'])
+ c = self.get_cursor()
+ c.executemany(q, hp_bulk)
+
+ return inserts
- #print "DEBUG: inserts: %s" %inserts
- #print "DEBUG: q: %s" % q
- c = self.get_cursor()
-
- if self.import_options['saveActions']:
- for r in inserts:
- c.execute(q, r)
- hpid[(r[0], r[1])] = self.get_last_insert_id(c)
- else:
- c.executemany(q, inserts)
-
- return hpid
-
- def storeHandsActions(self, hid, pids, hpid, adata, printdata = False):
+ def storeHandsActions(self, hid, pids, adata, ha_bulk = None, insert = False, printdata = False):
#print "DEBUG: %s %s %s" %(hid, pids, adata)
# This can be used to generate test data. Currently unused
@@ -1901,8 +1898,8 @@ class Database:
inserts = []
for a in adata:
- inserts.append( (hpid[(hid, pids[adata[a]['player']])],
- #self.getHandsPlayerId(self.hid, pids[adata[a]['player']]),
+ inserts.append( (hid,
+ pids[adata[a]['player']],
adata[a]['street'],
adata[a]['actionNo'],
adata[a]['streetActionNo'],
@@ -1915,11 +1912,14 @@ class Database:
adata[a]['allIn']
) )
- q = self.sql.query['store_hands_actions']
- q = q.replace('%s', self.sql.query['placeholder'])
+ if insert:
+ ha_bulk += inserts
+ q = self.sql.query['store_hands_actions']
+ q = q.replace('%s', self.sql.query['placeholder'])
+ c = self.get_cursor()
+ c.executemany(q, ha_bulk)
- c = self.get_cursor()
- c.executemany(q, inserts)
+ return inserts
def storeHudCache(self, gid, pids, starttime, pdata):
"""Update cached statistics. If update fails because no record exists, do an insert."""
@@ -2068,10 +2068,9 @@ class Database:
pass
def storeSessionsCache(self, pids, startTime, game, pdata):
- """Update cached sessions. If update fails because no record exists, do an insert"""
+ """Update cached sessions. If no record exists, do an insert"""
THRESHOLD = timedelta(seconds=int(self.sessionTimeout * 60))
- bigBet = int(Decimal(game['bb'])*200)
select_sessionscache = self.sql.query['select_sessionscache']
select_sessionscache = select_sessionscache.replace('%s', self.sql.query['placeholder'])
@@ -2094,6 +2093,9 @@ class Database:
delete_sessions = self.sql.query['delete_sessions']
delete_sessions = delete_sessions.replace('%s', self.sql.query['placeholder'])
+ update_hands_sessionid = self.sql.query['update_hands_sessionid']
+ update_hands_sessionid = update_hands_sessionid.replace('%s', self.sql.query['placeholder'])
+
#Grab playerIds using hero names in HUD_Config.xml
try:
# derive list of program owner's player ids
@@ -2123,29 +2125,32 @@ class Database:
if (game['type']=='ring'): line[0] = 1 # count ring hands
if (game['type']=='tour'): line[1] = 1 # count tour hands
- if (game['type']=='ring'): line[2] = pdata[p]['totalProfit'] #sum of profit
- if (game['type']=='ring'): line[3] = 0 #float(Decimal(pdata[p]['totalProfit'])/Decimal(bigBet)) #sum of big bets won
+ if (game['type']=='ring' and game['currency']=='USD'): line[2] = pdata[p]['totalProfit'] #sum of ring profit in USD
+ if (game['type']=='ring' and game['currency']=='EUR'): line[3] = pdata[p]['totalProfit'] #sum of ring profit in EUR
line[4] = startTime
inserts.append(line)
cursor = self.get_cursor()
+ id = None
for row in inserts:
threshold = []
threshold.append(row[-1]-THRESHOLD)
threshold.append(row[-1]+THRESHOLD)
cursor.execute(select_sessionscache, threshold)
- num = cursor.rowcount
+ session_records = cursor.fetchall()
+ num = len(session_records)
if (num == 1):
+ id = session_records[0][0] #grab the sessionId
# Try to do the update first:
#print "DEBUG: found 1 record to update"
update_mid = row + row[-1:]
cursor.execute(select_sessionscache_mid, update_mid[-2:])
- mid = cursor.rowcount
+ mid = len(cursor.fetchall())
if (mid == 0):
update_startend = row[-1:] + row + threshold
cursor.execute(select_sessionscache_start, update_startend[-3:])
- start = cursor.rowcount
+ start = len(cursor.fetchall())
if (start == 0):
#print "DEBUG:", start, " start record found. Update stats and start time"
cursor.execute(update_sessionscache_end, update_startend)
@@ -2156,37 +2161,36 @@ class Database:
#print "DEBUG: update stats mid-session"
cursor.execute(update_sessionscache_mid, update_mid)
elif (num > 1):
+ session_ids = [session_records[0][0], session_records[1][0]]
+ session_ids.sort()
# Multiple matches found - merge them into one session and update:
- #print "DEBUG:", num, "matches found"
- cursor.execute(merge_sessionscache, threshold)
+ # - Obtain the session start and end times for the new combined session
+ cursor.execute(merge_sessionscache, session_ids)
merge = cursor.fetchone()
- cursor.execute(delete_sessions, threshold)
+ # - Delete the old records
+ for id in session_ids:
+ cursor.execute(delete_sessions, id)
+ # - Insert the new updated record
cursor.execute(insert_sessionscache, merge)
+ # - Obtain the new sessionId and write over the old ids in Hands
+ id = self.get_last_insert_id(cursor) #grab the sessionId
+ update_hands = [id] + session_ids
+ cursor.execute(update_hands_sessionid, update_hands)
+ # - Update the newly combined record in SessionsCache with data from this hand
update_mid = row + row[-1:]
- cursor.execute(select_sessionscache_mid, update_mid[-2:])
- mid = cursor.rowcount
- if (mid == 0):
- update_startend = row[-1:] + row + threshold
- cursor.execute(select_sessionscache_start, update_startend[-3:])
- start = cursor.rowcount
- if (start == 0):
- #print "DEBUG:", start, " start record found. Update stats and start time"
- cursor.execute(update_sessionscache_end, update_startend)
- else:
- #print "DEBUG: 1 end record found. Update stats and end time time"
- cursor.execute(update_sessionscache_start, update_startend)
- else:
- #print "DEBUG: update stats mid-session"
- cursor.execute(update_sessionscache_mid, update_mid)
+ cursor.execute(update_sessionscache_mid, update_mid)
elif (num == 0):
# No matches found, insert new session:
insert = row + row[-1:]
insert = insert[-2:] + insert[:-2]
#print "DEBUG: No matches found. Insert record", insert
cursor.execute(insert_sessionscache, insert)
+ id = self.get_last_insert_id(cursor) #grab the sessionId
else:
# Something bad happened
- pass
+ pass
+
+ return id
def isDuplicate(self, gametypeID, siteHandNo):
dup = False
diff --git a/pyfpdb/DerivedStats.py b/pyfpdb/DerivedStats.py
index a21bc209..654e6001 100644
--- a/pyfpdb/DerivedStats.py
+++ b/pyfpdb/DerivedStats.py
@@ -115,6 +115,7 @@ class DerivedStats():
self.hands['tableName'] = hand.tablename
self.hands['siteHandNo'] = hand.handid
self.hands['gametypeId'] = None # Leave None, handled later after checking db
+ self.hands['sessionId'] = None # Leave None, added later if caching sessions
self.hands['startTime'] = hand.startTime # format this!
self.hands['importTime'] = None
self.hands['seats'] = self.countPlayers(hand)
diff --git a/pyfpdb/HUD_config.test.xml b/pyfpdb/HUD_config.test.xml
index 7282d0af..f8a99ee3 100644
--- a/pyfpdb/HUD_config.test.xml
+++ b/pyfpdb/HUD_config.test.xml
@@ -211,7 +211,7 @@ Left-Drag to Move"
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pyfpdb/Hand.py b/pyfpdb/Hand.py
index aae633b5..1e3642aa 100644
--- a/pyfpdb/Hand.py
+++ b/pyfpdb/Hand.py
@@ -57,6 +57,7 @@ class Hand(object):
#log.debug( _("Hand.init(): handText is ") + str(handText) )
self.config = config
self.saveActions = self.config.get_import_parameters().get('saveActions')
+ self.cacheSessions = self.config.get_import_parameters().get("cacheSessions")
#log = Configuration.get_logger("logging.conf", "db", log_dir=self.config.dir_log)
self.sitename = sitename
self.siteId = self.config.get_site_id(sitename)
@@ -258,7 +259,7 @@ dealt whether they were seen in a 'dealt to' line
db.commit()
#end def prepInsert
- def insert(self, db, printtest = False):
+ def insert(self, db, hp_data = None, ha_data = None, insert_data=False, printtest = False):
""" Function to insert Hand into database
Should not commit, and do minimal selects. Callers may want to cache commits
db: a connected Database object"""
@@ -276,17 +277,26 @@ db: a connected Database object"""
hh['gametypeId'] = self.dbid_gt
# seats TINYINT NOT NULL,
hh['seats'] = len(self.dbid_pids)
+
+ hp = self.stats.getHandsPlayers()
+
+ if self.cacheSessions:
+ hh['sessionId'] = db.storeSessionsCache(self.dbid_pids, self.startTime, self.gametype, hp)
self.dbid_hands = db.storeHand(hh, printdata = printtest)
- self.dbid_hpid = db.storeHandsPlayers(self.dbid_hands, self.dbid_pids,
- self.stats.getHandsPlayers(), printdata = printtest)
+
+ hp_inserts = db.storeHandsPlayers(self.dbid_hands, self.dbid_pids, hp,
+ insert=insert_data, hp_bulk = hp_data, printdata = printtest)
+
if self.saveActions:
- db.storeHandsActions(self.dbid_hands, self.dbid_pids, self.dbid_hpid,
- self.stats.getHandsActions(), printdata = printtest)
+ ha_inserts = db.storeHandsActions(self.dbid_hands, self.dbid_pids, self.stats.getHandsActions(),
+ insert=insert_data, ha_bulk = ha_data, printdata = printtest)
else:
log.info(_("Hand.insert(): hid #: %s is a duplicate") % hh['siteHandNo'])
self.is_duplicate = True # i.e. don't update hudcache
raise FpdbHandDuplicate(hh['siteHandNo'])
+
+ return hp_inserts, ha_inserts
def updateHudCache(self, db):
db.storeHudCache(self.dbid_gt, self.dbid_pids, self.startTime, self.stats.getHandsPlayers())
diff --git a/pyfpdb/SQL.py b/pyfpdb/SQL.py
index cc50633b..d7548c35 100644
--- a/pyfpdb/SQL.py
+++ b/pyfpdb/SQL.py
@@ -346,6 +346,7 @@ class Sql:
siteHandNo BIGINT NOT NULL,
tourneyId INT UNSIGNED,
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
+ sessionId INT UNSIGNED,
startTime DATETIME NOT NULL,
importTime DATETIME NOT NULL,
seats TINYINT NOT NULL,
@@ -383,6 +384,7 @@ class Sql:
siteHandNo BIGINT NOT NULL,
tourneyId INT,
gametypeId INT NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
+ sessionId INT,
startTime timestamp without time zone NOT NULL,
importTime timestamp without time zone NOT NULL,
seats SMALLINT NOT NULL,
@@ -419,6 +421,7 @@ class Sql:
siteHandNo INT NOT NULL,
tourneyId INT,
gametypeId INT NOT NULL,
+ sessionId INT,
startTime REAL NOT NULL,
importTime REAL NOT NULL,
seats INT NOT NULL,
@@ -1028,7 +1031,8 @@ class Sql:
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),
+ handId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handId) REFERENCES Hands(id),
+ playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
street SMALLINT NOT NULL,
actionNo SMALLINT NOT NULL,
streetActionNo SMALLINT NOT NULL,
@@ -1043,7 +1047,8 @@ class Sql:
elif db_server == 'postgresql':
self.query['createHandsActionsTable'] = """CREATE TABLE HandsActions (
id BIGSERIAL, PRIMARY KEY (id),
- handsPlayerId BIGINT, FOREIGN KEY (handsPlayerId) REFERENCES HandsPlayers(id),
+ handId BIGINT NOT NULL, FOREIGN KEY (handId) REFERENCES Hands(id),
+ playerId INT NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
street SMALLINT,
actionNo SMALLINT,
streetActionNo SMALLINT,
@@ -1057,7 +1062,8 @@ class Sql:
elif db_server == 'sqlite':
self.query['createHandsActionsTable'] = """CREATE TABLE HandsActions (
id INTEGER PRIMARY KEY,
- handsPlayerId BIGINT,
+ handId INT NOT NULL,
+ playerId INT NOT NULL,
street SMALLINT,
actionNo SMALLINT,
streetActionNo SMALLINT,
@@ -1067,9 +1073,7 @@ class Sql:
amountCalled INT,
numDiscarded SMALLINT,
cardsDiscarded TEXT,
- allIn BOOLEAN,
- FOREIGN KEY (handsPlayerId) REFERENCES HandsPlayers(id),
- FOREIGN KEY (actionId) REFERENCES Actions(id) ON DELETE CASCADE
+ allIn BOOLEAN
)"""
@@ -1410,8 +1414,8 @@ class Sql:
sessionEnd DATETIME NOT NULL,
ringHDs INT NOT NULL,
tourHDs INT NOT NULL,
- totalProfit INT NOT NULL,
- bigBets FLOAT UNSIGNED NOT NULL)
+ ringProfitUSD INT NOT NULL,
+ ringProfitEUR INT NOT NULL)
ENGINE=INNODB"""
elif db_server == 'postgresql':
@@ -1421,8 +1425,8 @@ class Sql:
sessionEnd REAL NOT NULL,
ringHDs INT NOT NULL,
tourHDs INT NOT NULL,
- totalProfit INT NOT NULL,
- bigBets FLOAT NOT NULL)
+ ringProfitUSD INT NOT NULL,
+ ringProfitEUR INT NOT NULL)
"""
elif db_server == 'sqlite':
self.query['createSessionsCacheTable'] = """CREATE TABLE SessionsCache (
@@ -1431,8 +1435,8 @@ class Sql:
sessionEnd REAL NOT NULL,
ringHDs INT NOT NULL,
tourHDs INT NOT NULL,
- totalProfit INT NOT NULL,
- bigBets REAL UNSIGNED NOT NULL)
+ ringProfitUSD INT NOT NULL,
+ ringProfitEUR INT NOT NULL)
"""
if db_server == 'mysql':
@@ -4281,12 +4285,13 @@ class Sql:
####################################
self.query['select_sessionscache'] = """
- SELECT sessionStart,
+ SELECT id,
+ sessionStart,
sessionEnd,
ringHDs,
tourHDs,
- totalProfit,
- bigBets
+ ringProfitUSD,
+ ringProfitEUR
FROM SessionsCache
WHERE sessionEnd>=%s
AND sessionStart<=%s"""
@@ -4296,8 +4301,8 @@ class Sql:
sessionEnd,
ringHDs,
tourHDs,
- totalProfit,
- bigBets
+ ringProfitUSD,
+ ringProfitEUR
FROM SessionsCache
WHERE sessionEnd>=%s
AND sessionStart<=%s"""
@@ -4307,8 +4312,8 @@ class Sql:
sessionEnd,
ringHDs,
tourHDs,
- totalProfit,
- bigBets
+ ringProfitUSD,
+ ringProfitEUR
FROM SessionsCache
WHERE sessionStart>%s
AND sessionEnd>=%s
@@ -4318,8 +4323,8 @@ class Sql:
UPDATE SessionsCache SET
ringHDs=ringHDs+%s,
tourHDs=tourHDs+%s,
- totalProfit=totalProfit+%s,
- bigBets=bigBets+%s
+ ringProfitUSD=ringProfitUSD+%s,
+ ringProfitEUR=ringProfitEUR+%s
WHERE sessionStart<=%s
AND sessionEnd>=%s"""
@@ -4328,8 +4333,8 @@ class Sql:
sessionStart=%s,
ringHDs=ringHDs+%s,
tourHDs=tourHDs+%s,
- totalProfit=totalProfit+%s,
- bigBets=bigBets+%s
+ ringProfitUSD=ringProfitUSD+%s,
+ ringProfitEUR=ringProfitEUR+%s
WHERE sessionStart>%s
AND sessionEnd>=%s
AND sessionStart<=%s"""
@@ -4339,8 +4344,8 @@ class Sql:
sessionEnd=%s,
ringHDs=ringHDs+%s,
tourHDs=tourHDs+%s,
- totalProfit=totalProfit+%s,
- bigBets=bigBets+%s
+ ringProfitUSD=ringProfitUSD+%s,
+ ringProfitEUR=ringProfitEUR+%s
WHERE sessionEnd<%s
AND sessionEnd>=%s
AND sessionStart<=%s"""
@@ -4351,20 +4356,27 @@ class Sql:
sessionEnd,
ringHDs,
tourHDs,
- totalProfit,
- bigBets)
+ ringProfitUSD,
+ ringProfitEUR)
VALUES (%s, %s, %s, %s, %s, %s)"""
self.query['merge_sessionscache'] = """
- SELECT min(sessionStart), max(sessionEnd), sum(ringHDs), sum(tourHDs), sum(totalProfit), sum(bigBets)
+ SELECT min(sessionStart), max(sessionEnd), sum(ringHDs), sum(tourHDs), sum(ringProfitUSD), sum(ringProfitEUR)
FROM SessionsCache
- WHERE sessionEnd>=%s
- AND sessionStart<=%s"""
+ WHERE (case when id=%s or id=%s then 1 else 0 end)=1"""
self.query['delete_sessions'] = """
DELETE FROM SessionsCache
- WHERE sessionEnd>=%s
- AND sessionStart<=%s"""
+ WHERE id=%s"""
+
+ self.query['update_hands_sessionid'] = """
+ UPDATE Hands SET
+ sessionId=%s
+ WHERE (case when sessionId=%s or sessionId=%s then 1 else 0 end)=1"""
+
+ ####################################
+ # Database management queries
+ ####################################
if db_server == 'mysql':
self.query['analyze'] = """
@@ -4554,11 +4566,12 @@ class Sql:
self.query['handsPlayersTTypeId_joiner'] = " OR TourneysPlayersId+0="
self.query['handsPlayersTTypeId_joiner_id'] = " OR id="
- self.query['store_hand'] = """INSERT INTO Hands (
+ self.query['store_hand'] = """insert into Hands (
tablename,
- gametypeid,
sitehandno,
tourneyId,
+ gametypeid,
+ sessionId,
startTime,
importtime,
seats,
@@ -4586,13 +4599,13 @@ class Sql:
street4Pot,
showdownPot
)
- VALUES
- (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
- %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
- %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""
+ values
+ (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
+ %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
+ %s, %s, %s, %s, %s, %s, %s, %s, %s)"""
- self.query['store_hands_players'] = """INSERT INTO HandsPlayers (
+ self.query['store_hands_players'] = """insert into HandsPlayers (
handId,
playerId,
startCash,
@@ -4696,7 +4709,7 @@ class Sql:
street3Raises,
street4Raises
)
- VALUES (
+ values (
%s, %s, %s, %s, %s,
%s, %s, %s, %s, %s,
%s, %s, %s, %s, %s,
@@ -4720,8 +4733,9 @@ class Sql:
%s, %s
)"""
- self.query['store_hands_actions'] = """INSERT INTO HandsActions (
- handsPlayerId,
+ self.query['store_hands_actions'] = """insert into HandsActions (
+ handId,
+ playerId,
street,
actionNo,
streetActionNo,
@@ -4733,10 +4747,10 @@ class Sql:
cardsDiscarded,
allIn
)
- VALUES (
+ values (
%s, %s, %s, %s, %s,
%s, %s, %s, %s, %s,
- %s
+ %s, %s
)"""
################################
diff --git a/pyfpdb/TestHandsPlayers.py b/pyfpdb/TestHandsPlayers.py
old mode 100755
new mode 100644
index c10d9909..1bd78457
--- a/pyfpdb/TestHandsPlayers.py
+++ b/pyfpdb/TestHandsPlayers.py
@@ -152,14 +152,14 @@ def compare_hands_file(filename, importer, errors):
pass
else:
# Stats don't match.
- if datum == "gametypeId":
+ if datum == "gametypeId" or datum == 'sessionId':
# Not an error. gametypeIds are dependent on the order added to the db.
#print "DEBUG: Skipping mismatched gamtypeId"
pass
else:
errors.error_report(filename, hand, datum, ghash, testhash, None)
except KeyError, e:
- errors.error_report(filename, False, "KeyError: '%s'" % stat, False, False, p)
+ errors.error_report(filename, False, "KeyError: '%s'" % datum, False, False, None)
def compare(leaf, importer, errors, site):
diff --git a/pyfpdb/fpdb_import.py b/pyfpdb/fpdb_import.py
index ee43ce8e..723c16ae 100644
--- a/pyfpdb/fpdb_import.py
+++ b/pyfpdb/fpdb_import.py
@@ -83,7 +83,6 @@ class Importer:
self.pos_in_file = {} # dict to remember how far we have read in the file
#Set defaults
self.callHud = self.config.get_import_parameters().get("callFpdbHud")
- self.cacheSessions = self.config.get_import_parameters().get("cacheSessions")
# CONFIGURATION OPTIONS
self.settings.setdefault("handCount", 0)
@@ -470,12 +469,20 @@ class Importer:
handlist = hhc.getProcessedHands()
self.pos_in_file[file] = hhc.getLastCharacterRead()
to_hud = []
+ hp_bulk = []
+ ha_bulk = []
+ i = 0
for hand in handlist:
+ i += 1
if hand is not None:
hand.prepInsert(self.database, printtest = self.settings['testData'])
try:
- hand.insert(self.database, printtest = self.settings['testData'])
+ hp_inserts, ha_inserts = hand.insert(self.database, hp_data = hp_bulk,
+ ha_data = ha_bulk, insert_data = len(handlist)==i,
+ printtest = self.settings['testData'])
+ hp_bulk += hp_inserts
+ ha_bulk += ha_inserts
except Exceptions.FpdbHandDuplicate:
duplicates += 1
else:
@@ -491,13 +498,6 @@ class Importer:
if hand is not None and not hand.is_duplicate:
hand.updateHudCache(self.database)
self.database.commit()
-
- # Call sessionsCache update
- if self.cacheSessions:
- for hand in handlist:
- if hand is not None and not hand.is_duplicate:
- hand.updateSessionsCache(self.database)
- self.database.commit()
#pipe the Hands.id out to the HUD
if self.caller: