p118 - added all in field to HandsActions and parsing to importer. still need to update hudCache generation to use this tho

expanded some todo prints and the graph missing lib error to clarify for users
This commit is contained in:
steffen123 2008-10-06 04:26:59 +01:00
parent ce5f6f1d71
commit 2a90030982
9 changed files with 64 additions and 33 deletions

View File

@ -3,6 +3,8 @@ Please also see db-todo.txt
alpha7 (release 11Oct-17Oct) alpha7 (release 11Oct-17Oct)
====== ======
fix bug that sawFlop/Turn/River/CBChance/etc gets miscalculated if someone is allin using the new all-in parsing
(carl i think) pgsql recreate doesnt work, and it may not store version field on creation if using sql file with pgadmin. (carl i think) pgsql recreate doesnt work, and it may not store version field on creation if using sql file with pgadmin.
check we're reading mucked cards from PS check we're reading mucked cards from PS
fix HUD config location and update release script accordingly fix HUD config location and update release script accordingly
@ -18,9 +20,9 @@ export settings[hud-defaultInterval] to conf
fill check-/call-raise cache fields fill check-/call-raise cache fields
printplayerflags on ps-lhe-ring-successful-steal-by-cutoff.txt, finish existing regression tests printplayerflags on ps-lhe-ring-successful-steal-by-cutoff.txt, finish existing regression tests
update blackbox testing to include all-in
change to savannah? change to savannah?
implement steal and positions in stud implement steal and positions in stud
anonymiser script to generate testdata without making a dozen find&replace all... remember to replace hand no with running no
separate db table design version and last bugfix in importer separate db table design version and last bugfix in importer
change tabledesign VALIGN and add link to webpage change tabledesign VALIGN and add link to webpage
finish updating filelist finish updating filelist
@ -29,14 +31,19 @@ debian/ubuntu package http://www.debian.org/doc/maint-guide/ch-start.en.html
howto remote DB howto remote DB
move all user docs to webpage move all user docs to webpage
(steffen) contributor list on webpage (steffen) contributor list on webpage
stud/razz tourneys, stud/razz tourneys
No river stats for stud games? No river stats for stud games?
hole/board cards are not correctly stored in the db for stud games hole/board cards are not correctly stored in the db for stud games
HORSE (and presumably other mixed games) hand history files not handled correctly HORSE (and presumably other mixed games) hand history files not handled correctly
rebuy/addon tourney support copy stderr rather than redirecting it http://aspn.activestate.com/ASPN/Mail/Message/python-list/3401682
before beta before beta
=========== ===========
move any remaining all-in text filters into goesAllInOnThisLine
find solution for capped in parseActionAmount
anonymiser script to generate testdata without making a dozen find&replace all... remember to replace hand no with running no
rebuy/addon tourney support
convert ante to an action so that it can be all-in
ebuild: support pgsql ebuild: support pgsql
autoimport doesnt seem to work with just one hand in the file autoimport doesnt seem to work with just one hand in the file
make Database.py display error if wrong or missing db lib make Database.py display error if wrong or missing db lib
@ -62,7 +69,6 @@ move version into seperate file for fpdb gui and db
SD/F, W$wsF, W$@SD too low as reported by daedal in 2+2 forum on 12/13aug SD/F, W$wsF, W$@SD too low as reported by daedal in 2+2 forum on 12/13aug
create little test script for people to run to verify successful installation of pydeps create little test script for people to run to verify successful installation of pydeps
split hud data generation into separate for loops and make it more efficient split hud data generation into separate for loops and make it more efficient
fix bug that sawFlop/Turn/River/CBChance/etc gets miscalculated if someone is allin - might as well add all-in recognition for this
make 3 default HUD configs (easy (4-5 fields), advanced (10ish fields), crazy (20 or so)) make 3 default HUD configs (easy (4-5 fields), advanced (10ish fields), crazy (20 or so))
make it work with postgres make it work with postgres
expand instructions for profile file expand instructions for profile file

View File

@ -747,6 +747,11 @@ The program itself is licensed under AGPLv3, see agpl-3.0.txt</p>
<TD><P>Bet stands for bring in, complete, bet, double bet, raise and double raise, since they all - technically - do the same thing. Unbet is used for when an uncalled bet is returned, this will have a negative value for amount.</P> <TD><P>Bet stands for bring in, complete, bet, double bet, raise and double raise, since they all - technically - do the same thing. Unbet is used for when an uncalled bet is returned, this will have a negative value for amount.</P>
<P>Other valid values: blind call check fold</P></TD> <P>Other valid values: blind call check fold</P></TD>
</TR> </TR>
<TR VALIGN=TOP>
<TD><P>allIn</P></TD>
<TD><P>boolean</P></TD>
<TD><P>Whether the player went all-in on this action</P></TD>
</TR>
<TR VALIGN=TOP> <TR VALIGN=TOP>
<TD><P>amount</P></TD> <TD><P>amount</P></TD>
<TD><P>int</P></TD> <TD><P>int</P></TD>

View File

@ -29,7 +29,8 @@ try:
from numpy import arange, cumsum from numpy import arange, cumsum
from pylab import * from pylab import *
except: except:
print "Failed to load libs for graphing, graphing will not function. Please install numpy and matplotlib." print "Failed to load libs for graphing, graphing will not function. Please install numpy and matplotlib if you want to use graphs."
print "This is of no consequence for other parts of the program, e.g. import and HUD are NOT affected by this problem."
import fpdb_import import fpdb_import
import fpdb_db import fpdb_db

View File

@ -19,7 +19,6 @@ import os
import sys import sys
errorFile = open('fpdb-error.log', 'w', 0) errorFile = open('fpdb-error.log', 'w', 0)
#errorFileObject = os.fdopen(errorFile)#, 'w', int(1))
sys.stderr = errorFile sys.stderr = errorFile
import pygtk import pygtk
@ -347,11 +346,11 @@ class fpdb:
#end def load_profile #end def load_profile
def not_implemented(self): def not_implemented(self):
print "todo: called unimplemented menu entry"#remove this once more entries are implemented print "todo: called unimplemented menu entry (users: pls ignore this)"#remove this once more entries are implemented
#end def not_implemented #end def not_implemented
def obtain_global_lock(self): def obtain_global_lock(self):
print "todo: implement obtain_global_lock" print "todo: implement obtain_global_lock (users: pls ignore this)"
#end def obtain_global_lock #end def obtain_global_lock
def quit(self, widget, data): def quit(self, widget, data):
@ -421,7 +420,7 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("delete_event", self.delete_event) self.window.connect("delete_event", self.delete_event)
self.window.connect("destroy", self.destroy) self.window.connect("destroy", self.destroy)
self.window.set_title("Free Poker DB - version: alpha6+, p112 or higher") self.window.set_title("Free Poker DB - version: alpha6+, p118 or higher")
self.window.set_border_width(1) self.window.set_border_width(1)
self.window.set_size_request(1020,400) self.window.set_size_request(1020,400)
self.window.set_resizable(True) self.window.set_resizable(True)

View File

@ -48,7 +48,7 @@ class fpdb_db:
try: try:
self.cursor.execute("SELECT * FROM Settings") self.cursor.execute("SELECT * FROM Settings")
settings=self.cursor.fetchone() settings=self.cursor.fetchone()
if settings[0]!=76: if settings[0]!=118:
print "outdated or too new database version - please recreate tables" print "outdated or too new database version - please recreate tables"
self.wrongDbVersion=True self.wrongDbVersion=True
except:# _mysql_exceptions.ProgrammingError: except:# _mysql_exceptions.ProgrammingError:
@ -152,7 +152,7 @@ class fpdb_db:
#end def get_db_info #end def get_db_info
def fillDefaultData(self): def fillDefaultData(self):
self.cursor.execute("INSERT INTO Settings VALUES (76);") self.cursor.execute("INSERT INTO Settings VALUES (118);")
self.cursor.execute("INSERT INTO Sites VALUES (DEFAULT, \"Full Tilt Poker\", 'USD');") self.cursor.execute("INSERT INTO Sites VALUES (DEFAULT, \"Full Tilt Poker\", 'USD');")
self.cursor.execute("INSERT INTO Sites VALUES (DEFAULT, \"PokerStars\", 'USD');") self.cursor.execute("INSERT INTO Sites VALUES (DEFAULT, \"PokerStars\", 'USD');")
self.cursor.execute("INSERT INTO TourneyTypes VALUES (DEFAULT, 1, 0, 0, 0, False);") self.cursor.execute("INSERT INTO TourneyTypes VALUES (DEFAULT, 1, 0, 0, 0, False);")
@ -311,6 +311,7 @@ class fpdb_db:
street SMALLINT NOT NULL, street SMALLINT NOT NULL,
actionNo SMALLINT NOT NULL, actionNo SMALLINT NOT NULL,
action CHAR(5) NOT NULL, action CHAR(5) NOT NULL,
allIn BOOLEAN NOT NULL,
amount INT NOT NULL, amount INT NOT NULL,
comment TEXT, comment TEXT,
commentTs DATETIME)""") commentTs DATETIME)""")

View File

@ -30,7 +30,7 @@ def mainParser(db, cursor, site, category, hand):
lineTypes=[] #char, valid values: header, name, cards, action, win, rake, ignore lineTypes=[] #char, valid values: header, name, cards, action, win, rake, ignore
lineStreets=[] #char, valid values: (predeal, preflop, flop, turn, river) lineStreets=[] #char, valid values: (predeal, preflop, flop, turn, river)
cardValues, cardSuits, boardValues, boardSuits, antes, actionTypes, actionAmounts, actionNos, actionTypeByNo, seatLines, winnings, rakes=[], [],[],[],[],[],[],[],[],[],[],[] cardValues, cardSuits, boardValues, boardSuits, antes, actionTypes, allIns, actionAmounts, actionNos, actionTypeByNo, seatLines, winnings, rakes=[],[],[],[],[],[],[],[],[],[],[],[],[]
#part 1: read hand no and check for duplicate #part 1: read hand no and check for duplicate
siteHandNo=fpdb_simple.parseSiteHandNo(hand[0]) siteHandNo=fpdb_simple.parseSiteHandNo(hand[0])
@ -76,7 +76,7 @@ def mainParser(db, cursor, site, category, hand):
startCashes=tmp['startCashes'] startCashes=tmp['startCashes']
seatNos=tmp['seatNos'] seatNos=tmp['seatNos']
fpdb_simple.createArrays(category, len(names), cardValues, cardSuits, antes, winnings, rakes, actionTypes, actionAmounts, actionNos, actionTypeByNo) fpdb_simple.createArrays(category, len(names), cardValues, cardSuits, antes, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, actionTypeByNo)
#3b read positions #3b read positions
if base=="hold": if base=="hold":
@ -87,7 +87,7 @@ def mainParser(db, cursor, site, category, hand):
if (lineTypes[i]=="cards"): if (lineTypes[i]=="cards"):
fpdb_simple.parseCardLine (site, category, lineStreets[i], hand[i], names, cardValues, cardSuits, boardValues, boardSuits) fpdb_simple.parseCardLine (site, category, lineStreets[i], hand[i], names, cardValues, cardSuits, boardValues, boardSuits)
elif (lineTypes[i]=="action"): elif (lineTypes[i]=="action"):
fpdb_simple.parseActionLine (site, base, isTourney, hand[i], lineStreets[i], playerIDs, names, actionTypes, actionAmounts, actionNos, actionTypeByNo) fpdb_simple.parseActionLine (site, base, isTourney, hand[i], lineStreets[i], playerIDs, names, actionTypes, allIns, actionAmounts, actionNos, actionTypeByNo)
elif (lineTypes[i]=="win"): elif (lineTypes[i]=="win"):
fpdb_simple.parseWinLine (hand[i], site, names, winnings, isTourney) fpdb_simple.parseWinLine (hand[i], site, names, winnings, isTourney)
elif (lineTypes[i]=="rake"): elif (lineTypes[i]=="rake"):
@ -138,22 +138,22 @@ def mainParser(db, cursor, site, category, hand):
if base=="hold": if base=="hold":
result = fpdb_save_to_db.tourney_holdem_omaha(cursor, base, category, siteTourneyNo, buyin, fee, knockout, entries, prizepool, tourneyStartTime, payin_amounts, ranks, tourneyTypeId, siteID, result = fpdb_save_to_db.tourney_holdem_omaha(cursor, base, category, siteTourneyNo, buyin, fee, knockout, entries, prizepool, tourneyStartTime, payin_amounts, ranks, tourneyTypeId, siteID,
siteHandNo, gametypeID, handStartTime, names, playerIDs, startCashes, positions, cardValues, cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos) siteHandNo, gametypeID, handStartTime, names, playerIDs, startCashes, positions, cardValues, cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
elif base=="stud": elif base=="stud":
result = fpdb_save_to_db.tourney_stud(cursor, base, category, siteTourneyNo, buyin, fee, result = fpdb_save_to_db.tourney_stud(cursor, base, category, siteTourneyNo, buyin, fee,
knockout, entries, prizepool, tourneyStartTime, payin_amounts, ranks, knockout, entries, prizepool, tourneyStartTime, payin_amounts, ranks,
siteHandNo, siteID, gametypeID, handStartTime, names, playerIDs, siteHandNo, siteID, gametypeID, handStartTime, names, playerIDs,
startCashes, antes, cardValues, cardSuits, winnings, rakes, startCashes, antes, cardValues, cardSuits, winnings, rakes,
actionTypes, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos) actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
else: else:
raise fpdb_simple.FpdbError ("unrecognised category") raise fpdb_simple.FpdbError ("unrecognised category")
else: else:
if base=="hold": if base=="hold":
result = fpdb_save_to_db.ring_holdem_omaha(cursor, base, category, siteHandNo, gametypeID, handStartTime, names, playerIDs, startCashes, positions, cardValues, cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos) result = fpdb_save_to_db.ring_holdem_omaha(cursor, base, category, siteHandNo, gametypeID, handStartTime, names, playerIDs, startCashes, positions, cardValues, cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
elif base=="stud": elif base=="stud":
result = fpdb_save_to_db.ring_stud(cursor, base, category, siteHandNo, gametypeID, result = fpdb_save_to_db.ring_stud(cursor, base, category, siteHandNo, gametypeID,
handStartTime, names, playerIDs, startCashes, antes, cardValues, handStartTime, names, playerIDs, startCashes, antes, cardValues,
cardSuits, winnings, rakes, actionTypes, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos) cardSuits, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
else: else:
raise fpdb_simple.FpdbError ("unrecognised category") raise fpdb_simple.FpdbError ("unrecognised category")
db.commit() db.commit()

View File

@ -35,7 +35,7 @@ def ring_stud(cursor, base, category, site_hand_no, gametype_id, hand_start_time
return hands_id return hands_id
#end def ring_stud #end def ring_stud
def ring_holdem_omaha(cursor, base, category, site_hand_no, gametype_id, hand_start_time, names, player_ids, start_cashes, positions, card_values, card_suits, board_values, board_suits, winnings, rakes, action_types, action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos): def ring_holdem_omaha(cursor, base, category, site_hand_no, gametype_id, hand_start_time, names, player_ids, start_cashes, positions, card_values, card_suits, board_values, board_suits, winnings, rakes, action_types, allIns, action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
"""stores a holdem/omaha hand into the database""" """stores a holdem/omaha hand into the database"""
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits) fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
fpdb_simple.fill_board_cards(board_values, board_suits) fpdb_simple.fill_board_cards(board_values, board_suits)
@ -48,7 +48,7 @@ def ring_holdem_omaha(cursor, base, category, site_hand_no, gametype_id, hand_st
fpdb_simple.store_board_cards(cursor, hands_id, board_values, board_suits) fpdb_simple.store_board_cards(cursor, hands_id, board_values, board_suits)
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, action_amounts, actionNos) fpdb_simple.storeActions(cursor, hands_players_ids, action_types, allIns, action_amounts, actionNos)
return hands_id return hands_id
#end def ring_holdem_omaha #end def ring_holdem_omaha

View File

@ -204,7 +204,7 @@ def convertCardValuesBoard(arr):
#end def convertCardValuesBoard #end def convertCardValuesBoard
#this creates the 2D/3D arrays. manipulates the passed arrays instead of returning. #this creates the 2D/3D arrays. manipulates the passed arrays instead of returning.
def createArrays(category, seats, card_values, card_suits, antes, winnings, rakes, action_types, action_amounts, actionNos, actionTypeByNo): def createArrays(category, seats, card_values, card_suits, antes, winnings, rakes, action_types, allIns, action_amounts, actionNos, actionTypeByNo):
for i in range(seats):#create second dimension arrays for i in range(seats):#create second dimension arrays
tmp=[] tmp=[]
card_values.append(tmp) card_values.append(tmp)
@ -223,6 +223,8 @@ def createArrays(category, seats, card_values, card_suits, antes, winnings, rake
tmp=[] tmp=[]
action_types.append(tmp) action_types.append(tmp)
tmp=[] tmp=[]
allIns.append(tmp)
tmp=[]
action_amounts.append(tmp) action_amounts.append(tmp)
tmp=[] tmp=[]
actionNos.append(tmp) actionNos.append(tmp)
@ -232,6 +234,8 @@ def createArrays(category, seats, card_values, card_suits, antes, winnings, rake
tmp=[] tmp=[]
action_types[i].append(tmp) action_types[i].append(tmp)
tmp=[] tmp=[]
allIns[i].append(tmp)
tmp=[]
action_amounts[i].append(tmp) action_amounts[i].append(tmp)
tmp=[] tmp=[]
actionNos[i].append(tmp) actionNos[i].append(tmp)
@ -543,10 +547,10 @@ def isWinLine(line):
#returns the amount of cash/chips put into the put in the given action line #returns the amount of cash/chips put into the put in the given action line
def parseActionAmount(line, atype, site, isTourney): def parseActionAmount(line, atype, site, isTourney):
if (line.endswith(" and is all-in")): #if (line.endswith(" and is all-in")):
line=line[:-14] # line=line[:-14]
elif (line.endswith(", and is all in")): #elif (line.endswith(", and is all in")):
line=line[:-15] # line=line[:-15]
if line.endswith(", and is capped"):#ideally we should recognise this as an all-in if category is capXl if line.endswith(", and is capped"):#ideally we should recognise this as an all-in if category is capXl
line=line[:-15] line=line[:-15]
@ -591,7 +595,7 @@ def parseActionAmount(line, atype, site, isTourney):
#doesnt return anything, simply changes the passed arrays action_types and #doesnt return anything, simply changes the passed arrays action_types and
# action_amounts. For stud this expects numeric streets (3-7), for # action_amounts. For stud this expects numeric streets (3-7), for
# holdem/omaha it expects predeal, preflop, flop, turn or river # holdem/omaha it expects predeal, preflop, flop, turn or river
def parseActionLine(site, base, isTourney, line, street, playerIDs, names, action_types, action_amounts, actionNos, actionTypeByNo): def parseActionLine(site, base, isTourney, line, street, playerIDs, names, action_types, allIns, action_amounts, actionNos, actionTypeByNo):
if (street=="predeal" or street=="preflop"): if (street=="predeal" or street=="preflop"):
street=0 street=0
elif (street=="flop"): elif (street=="flop"):
@ -607,17 +611,31 @@ def parseActionLine(site, base, isTourney, line, street, playerIDs, names, actio
if actionNos[street][player][count]>=nextActionNo: if actionNos[street][player][count]>=nextActionNo:
nextActionNo=actionNos[street][player][count]+1 nextActionNo=actionNos[street][player][count]+1
line, allIn=goesAllInOnThisLine(line)
atype=parseActionType(line) atype=parseActionType(line)
playerno=recognisePlayerNo(line, names, atype) playerno=recognisePlayerNo(line, names, atype)
amount=parseActionAmount(line, atype, site, isTourney) amount=parseActionAmount(line, atype, site, isTourney)
action_types[street][playerno].append(atype) action_types[street][playerno].append(atype)
allIns[street][playerno].append(allIn)
action_amounts[street][playerno].append(amount) action_amounts[street][playerno].append(amount)
actionNos[street][playerno].append(nextActionNo) actionNos[street][playerno].append(nextActionNo)
tmp=(playerIDs[playerno], atype) tmp=(playerIDs[playerno], atype)
actionTypeByNo[street].append(tmp) actionTypeByNo[street].append(tmp)
#end def parseActionLine #end def parseActionLine
def goesAllInOnThisLine(line):
"""returns whether the player went all-in on this line and removes the all-in text from the line."""
isAllIn=False
if (line.endswith(" and is all-in")):
line=line[:-14]
isAllIn=True
elif (line.endswith(", and is all in")):
line=line[:-15]
isAllIn=True
return (line, isAllIn)
#end def goesAllInOnThisLine
#returns the action type code (see table design) of the given action line #returns the action type code (see table design) of the given action line
def parseActionType(line): def parseActionType(line):
if (line.startswith("Uncalled bet")): if (line.startswith("Uncalled bet")):
@ -1185,14 +1203,14 @@ def splitRake(winnings, rakes, totalRake):
rakes[i]=totalRake*winPortion rakes[i]=totalRake*winPortion
#end def splitRake #end def splitRake
def storeActions(cursor, hands_players_ids, action_types, action_amounts, actionNos): def storeActions(cursor, handsPlayersIds, actionTypes, allIns, actionAmounts, actionNos):
#stores into table hands_actions #stores into table hands_actions
#print "start of storeActions, actionNos:",actionNos #print "start of storeActions, actionNos:",actionNos
#print " action_amounts:",action_amounts #print " action_amounts:",action_amounts
for i in range (len(action_types)): #iterate through streets for i in range (len(actionTypes)): #iterate through streets
for j in range (len(action_types[i])): #iterate through names for j in range (len(actionTypes[i])): #iterate through names
for k in range (len(action_types[i][j])): #iterate through individual actions of that player on that street for k in range (len(actionTypes[i][j])): #iterate through individual actions of that player on that street
cursor.execute ("INSERT INTO HandsActions (handPlayerId, street, actionNo, action, amount) VALUES (%s, %s, %s, %s, %s)", (hands_players_ids[j], i, actionNos[i][j][k], action_types[i][j][k], action_amounts[i][j][k])) cursor.execute ("INSERT INTO HandsActions (handPlayerId, street, actionNo, action, allIn, amount) VALUES (%s, %s, %s, %s, %s, %s)", (handsPlayersIds[j], i, actionNos[i][j][k], actionTypes[i][j][k], allIns[i][j][k], actionAmounts[i][j][k]))
#end def storeActions #end def storeActions
def store_board_cards(cursor, hands_id, board_values, board_suits): def store_board_cards(cursor, hands_id, board_values, board_suits):

View File

@ -137,6 +137,7 @@ CREATE TABLE HandsActions (
street SMALLINT, street SMALLINT,
actionNo SMALLINT, actionNo SMALLINT,
action CHAR(5), action CHAR(5),
allIn BOOLEAN,
amount INT, amount INT,
comment TEXT, comment TEXT,
commentTs timestamp without time zone); commentTs timestamp without time zone);
@ -211,7 +212,7 @@ CREATE TABLE HudCache (
street4CheckCallRaiseChance INT, street4CheckCallRaiseChance INT,
street4CheckCallRaiseDone INT); street4CheckCallRaiseDone INT);
INSERT INTO Settings VALUES (76); INSERT INTO Settings VALUES (118);
INSERT INTO Sites ("name", currency) VALUES ('Full Tilt Poker', 'USD'); INSERT INTO Sites ("name", currency) VALUES ('Full Tilt Poker', 'USD');
INSERT INTO Sites ("name", currency) VALUES ('PokerStars', 'USD'); INSERT INTO Sites ("name", currency) VALUES ('PokerStars', 'USD');
INSERT INTO TourneyTypes (buyin, fee, knockout, rebuyOrAddon) VALUES (0, 0, 0, FALSE); INSERT INTO TourneyTypes (buyin, fee, knockout, rebuyOrAddon) VALUES (0, 0, 0, FALSE);