· 7 years ago · Oct 18, 2018, 03:42 PM
1using Shared.Helpers;
2using Shared.Models.Database;
3using Shared.Poker.Models;
4using System;
5using System.Collections.Generic;
6using System.Data.SQLite;
7using System.Data.SqlTypes;
8using System.IO;
9using static Shared.Models.Database.CBoardModel;
10using static Shared.Poker.Models.CAction;
11using static Shared.Poker.Models.CPlayer;
12using static Shared.Poker.Models.CTableInfos;
13
14namespace Amigo.Helpers
15{
16 public static class CDBHelper
17 {
18 private const byte CC_ALL_FLOP_GAME_STATES_COUNT = 80;
19 private const short CC_ALL_TURN_GAME_STATES_COUNT = 1150;
20 private const short CC_ALL_RIVER_GAME_STATES_COUNT = 18100;
21 private const short CC_ALL_AVERAGE_PLAYER_BLUFFS_FLOP = 30141;
22
23 public static Dictionary<long, CFlopGameState> FFDicAllFlopGameStatesByID = new Dictionary<long, CFlopGameState>(CC_ALL_FLOP_GAME_STATES_COUNT);
24 public static Dictionary<Tuple<TypesPot, PossiblePositions, ActionsPossible, BetSizePossible?>, CFlopGameState> FFDicAllFlopGameStatesByInfos = new Dictionary<Tuple<TypesPot, PossiblePositions, ActionsPossible, BetSizePossible?>, CFlopGameState>(CC_ALL_FLOP_GAME_STATES_COUNT);
25
26 public static Dictionary<long, CTurnGameState> FFDicAllTurnGameStatesByID = new Dictionary<long, CTurnGameState>(CC_ALL_TURN_GAME_STATES_COUNT);
27 public static Dictionary<Tuple<CFlopGameState, ActionsPossible, BetSizePossible?>, CTurnGameState> FFDicAllTurnGameStatesByInfos = new Dictionary<Tuple<CFlopGameState, ActionsPossible, BetSizePossible?>, CTurnGameState>(CC_ALL_TURN_GAME_STATES_COUNT);
28
29 public static Dictionary<long, CRiverGameState> FFDicAllRiverGameStatesByID = new Dictionary<long, CRiverGameState>(CC_ALL_RIVER_GAME_STATES_COUNT);
30 public static Dictionary<Tuple<CTurnGameState, ActionsPossible, BetSizePossible?>, CRiverGameState> FFDicAllRiverGameStatesByInfos = new Dictionary<Tuple<CTurnGameState, ActionsPossible, BetSizePossible?>, CRiverGameState>(CC_ALL_RIVER_GAME_STATES_COUNT);
31
32 public static Dictionary<Tuple<CFlopGameState, BoardMetaDataFlags>, List<Tuple<Tuple<bool, bool, bool, bool, sbyte>, double>>> PDicAveragePlayerBluffsFlop = new Dictionary<Tuple<CFlopGameState, BoardMetaDataFlags>, List<Tuple<Tuple<bool, bool, bool, bool, sbyte>, double>>>(CC_ALL_AVERAGE_PLAYER_BLUFFS_FLOP);
33
34 private static SQLiteConnection FFConnection = GetConnection();
35
36 #region Insert queries
37 #region Preflop queries
38 public static void InsertAveragePlayerPreflopRange(LinkedList<CAveragePlayerPreflopRange> _lstAvgPlayerPreflopRange)
39 {
40 if (FFConnection.State == System.Data.ConnectionState.Closed)
41 FFConnection.Open();
42
43 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
44 {
45 foreach (CAveragePlayerPreflopRange avgPlayer in _lstAvgPlayerPreflopRange)
46 {
47 string sql = "INSERT OR REPLACE INTO AveragePlayerPreflopRanges(TypePot, Position, PocketMask, HandDescription, SampleCount) VALUES (?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerPreflopRanges WHERE TypePot=? AND Position=? AND PocketMask=?), 0) + 1);";
48
49 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
50 {
51 command.CommandText = sql;
52 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTypePot));
53 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PPosition));
54 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PPocketMask));
55 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandDescription));
56
57 // For the select
58 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTypePot));
59 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PPosition));
60 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PPocketMask));
61
62 command.ExecuteNonQuery();
63 }
64 }
65
66 transaction.Commit();
67 }
68 }
69 #region Flop queries
70 public static void InsertAveragePlayerBluffsFlop(LinkedList<CAveragePlayerBluffsFlop> _lstAvgPlayerBluffsFlop)
71 {
72 if (FFConnection.State == System.Data.ConnectionState.Closed)
73 FFConnection.Open();
74
75 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
76 {
77 foreach (CAveragePlayerBluffsFlop avgPlayer in _lstAvgPlayerBluffsFlop)
78 {
79 string sql = "INSERT OR REPLACE INTO AveragePlayerBluffsFlop(FlopGameStateID, BoardType, BoardHeat, BDFD, BDSD, SD, FD, IndexHighestCardExcludingBoard, SampleCount) VALUES (?, ?, ?, ?, ?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerBluffsFlop WHERE FlopGameStateID=? AND BoardType=? AND BDFD=? AND BDSD=? AND SD=? AND FD=? AND IndexHighestCardExcludingBoard=?), 0) + 1);";
80
81 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
82 {
83 command.CommandText = sql;
84 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
85 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
86 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
87 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsBackdoorFlushDraw)));
88 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsBackdoorStraightDraw)));
89 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsStraightDraw)));
90 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsFlushDraw)));
91 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoard));
92
93 // For the select here
94 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
95 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
96 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsBackdoorFlushDraw)));
97 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsBackdoorStraightDraw)));
98 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsStraightDraw)));
99 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsFlushDraw)));
100 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoard));
101
102 command.ExecuteNonQuery();
103 }
104 }
105
106 transaction.Commit();
107 }
108 }
109 public static void InsertAveragePlayerBluffsFlopDebug(LinkedList<CAveragePlayerBluffsFlop> _lstAvgPlayerBluffsFlop, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
110 {
111 SQLiteConnection oldConnection = FFConnection;
112
113 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
114
115 if (FFConnection.State == System.Data.ConnectionState.Closed)
116 FFConnection.Open();
117
118 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
119 {
120 int currentIndex = 0;
121 foreach (CAveragePlayerBluffsFlop avgPlayer in _lstAvgPlayerBluffsFlop)
122 {
123 string sql = "INSERT INTO AveragePlayerBluffsFlop(FlopGameStateID, BoardType, BoardHeat, BDFD, BDSD, SD, FD, IndexHighestCardExcludingBoard, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
124 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
125
126 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
127 {
128 command.CommandText = sql;
129 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
130 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
131 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
132 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsBackdoorFlushDraw)));
133 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsBackdoorStraightDraw)));
134 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsStraightDraw)));
135 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsFlushDraw)));
136 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIndexHighestCardExcludingBoard)));
137 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
138 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
139 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
140 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
141 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
142
143 command.ExecuteNonQuery();
144 }
145 }
146
147 transaction.Commit();
148 }
149
150 FFConnection = oldConnection;
151 }
152 public static void InsertAveragePlayerBluffsWithALotsOfEquityFlop(LinkedList<CAveragePlayerBluffsWithLotsOfEquityFlop> _lstAveragePlayerBluffsWithLotsOfEquityFlop)
153 {
154 if (FFConnection.State == System.Data.ConnectionState.Closed)
155 FFConnection.Open();
156
157 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
158 {
159 foreach (CAveragePlayerBluffsWithLotsOfEquityFlop avgPlayer in _lstAveragePlayerBluffsWithLotsOfEquityFlop)
160 {
161 string sql = "INSERT OR REPLACE INTO AveragePlayerBluffsWithALotsOfEquityFlop (FlopGameStateID, BoardType, BoardHeat, NbOuts, SampleCount) VALUES (?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerBluffsWithALotsOfEquityFlop WHERE FlopGameStateID=? AND BoardType=? AND NbOuts=?), 0) + 1);";
162
163 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
164 {
165 command.CommandText = sql;
166 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
167 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
168 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
169 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PNumberOfOuts)));
170
171 // For the select here
172 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
173 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
174 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PNumberOfOuts)));
175
176 command.ExecuteNonQuery();
177 }
178 }
179
180 transaction.Commit();
181 }
182 }
183 public static void InsertAveragePlayerBluffsWithALotsOfEquityDebugFlop(LinkedList<CAveragePlayerBluffsWithLotsOfEquityFlop> _lstAveragePlayerBluffsWithLotsOfEquityFlop, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
184 {
185 SQLiteConnection oldConnection = FFConnection;
186
187 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
188
189 if (FFConnection.State == System.Data.ConnectionState.Closed)
190 FFConnection.Open();
191
192 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
193 {
194 int currentIndex = 0;
195 foreach (CAveragePlayerBluffsWithLotsOfEquityFlop avgPlayer in _lstAveragePlayerBluffsWithLotsOfEquityFlop)
196 {
197 string sql = "INSERT INTO AveragePlayerBluffsWithALotsOfEquityFlop (FlopGameStateID, BoardType, BoardHeat, NbOuts, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);";
198 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
199
200 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
201 {
202 command.CommandText = sql;
203 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
204 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
205 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
206 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PNumberOfOuts)));
207 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
208 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
209 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
210 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
211 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
212
213 command.ExecuteNonQuery();
214 }
215 }
216
217 transaction.Commit();
218 }
219
220 FFConnection = oldConnection;
221 }
222 public static void InsertAveragePlayerMadeHandSDAndFDFlop(LinkedList<CAveragePlayerMadeHandSDAndFDFlop> _lstAveragePlayerMadeHandSDAndFDFlop)
223 {
224 if (FFConnection.State == System.Data.ConnectionState.Closed)
225 FFConnection.Open();
226
227 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
228 {
229 foreach (CAveragePlayerMadeHandSDAndFDFlop avgPlayer in _lstAveragePlayerMadeHandSDAndFDFlop)
230 {
231 string sql = "INSERT OR REPLACE INTO AveragePlayerMadeHandSDAndFDFlop (FlopGameStateID, BoardType, BoardHeat, SampleCount) VALUES (?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerMadeHandSDAndFDFlop WHERE FlopGameStateID=? AND BoardType=?), 0) + 1);";
232
233 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
234 {
235 command.CommandText = sql;
236 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
237 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
238 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
239
240 // For the select here
241 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
242 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
243
244 command.ExecuteNonQuery();
245 }
246 }
247
248 transaction.Commit();
249 }
250 }
251 public static void InsertAveragePlayerMadeHandSDAndFDDebugFlop(LinkedList<CAveragePlayerMadeHandSDAndFDFlop> _lstAveragePlayerMadeHandSDAndFDFlop, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
252 {
253 SQLiteConnection oldConnection = FFConnection;
254
255 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
256
257 if (FFConnection.State == System.Data.ConnectionState.Closed)
258 FFConnection.Open();
259
260 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
261 {
262 int currentIndex = 0;
263 foreach (CAveragePlayerMadeHandSDAndFDFlop avgPlayer in _lstAveragePlayerMadeHandSDAndFDFlop)
264 {
265 string sql = "INSERT INTO AveragePlayerMadeHandSDAndFDFlop (FlopGameStateID, BoardType, BoardHeat, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?);";
266 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
267
268 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
269 {
270 command.CommandText = sql;
271 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
272 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
273 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
274 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
275 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
276 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
277 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
278 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
279
280 command.ExecuteNonQuery();
281 }
282 }
283
284 transaction.Commit();
285 }
286
287 FFConnection = oldConnection;
288 }
289 public static void InsertAveragePlayerMadeHandFDFlop(LinkedList<CAveragePlayerMadeHandFDFlop> _lstAveragePlayerMadeHandFDFlop)
290 {
291 if (FFConnection.State == System.Data.ConnectionState.Closed)
292 FFConnection.Open();
293
294 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
295 {
296 foreach (CAveragePlayerMadeHandFDFlop avgPlayer in _lstAveragePlayerMadeHandFDFlop)
297 {
298 string sql = "INSERT OR REPLACE INTO AveragePlayerMadeHandFDFlop (FlopGameStateID, BoardType, BoardHeat, IndexHighestCardExcludingBoardOfFlushCard, SampleCount) VALUES (?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerMadeHandFDFlop WHERE FlopGameStateID=? AND BoardType=? AND IndexHighestCardExcludingBoardOfFlushCard=?), 0) + 1);";
299
300 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
301 {
302 command.CommandText = sql;
303 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
304 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
305 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
306 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoardOfFlushCard));
307
308 // For the select here
309 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
310 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
311 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoardOfFlushCard));
312
313 command.ExecuteNonQuery();
314 }
315 }
316
317 transaction.Commit();
318 }
319 }
320 public static void InsertAveragePlayerMadeHandFDDebugFlop(LinkedList<CAveragePlayerMadeHandFDFlop> _lstAveragePlayerMadeHandFDFlop, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
321 {
322 SQLiteConnection oldConnection = FFConnection;
323
324 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
325
326 if (FFConnection.State == System.Data.ConnectionState.Closed)
327 FFConnection.Open();
328
329 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
330 {
331 int currentIndex = 0;
332 foreach (CAveragePlayerMadeHandFDFlop avgPlayer in _lstAveragePlayerMadeHandFDFlop)
333 {
334 string sql = "INSERT INTO AveragePlayerMadeHandFDFlop (FlopGameStateID, BoardType, BoardHeat, IndexHighestCardExcludingBoardOfFlushCard, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);";
335 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
336
337 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
338 {
339 command.CommandText = sql;
340 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
341 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
342 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
343 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoardOfFlushCard));
344 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
345 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
346 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
347 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
348 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
349
350 command.ExecuteNonQuery();
351 }
352 }
353
354 transaction.Commit();
355 }
356
357 FFConnection = oldConnection;
358 }
359 public static void InsertAveragePlayerMadeHandSDFlop(LinkedList<CAveragePlayerMadeHandSDFlop> _lstAveragePlayerMadeHandSDFlop)
360 {
361 if (FFConnection.State == System.Data.ConnectionState.Closed)
362 FFConnection.Open();
363
364 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
365 {
366 foreach (CAveragePlayerMadeHandSDFlop avgPlayer in _lstAveragePlayerMadeHandSDFlop)
367 {
368 string sql = "INSERT OR REPLACE INTO AveragePlayerMadeHandSDFlop (FlopGameStateID, BoardType, BoardHeat, SampleCount) VALUES (?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerMadeHandSDFlop WHERE FlopGameStateID=? AND BoardType=?), 0) + 1);";
369
370 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
371 {
372 command.CommandText = sql;
373 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
374 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
375 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
376
377 // For the select here
378 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
379 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
380
381 command.ExecuteNonQuery();
382 }
383 }
384
385 transaction.Commit();
386 }
387 }
388 public static void InsertAveragePlayerMadeHandSDDebugFlop(LinkedList<CAveragePlayerMadeHandSDFlop> _lstAveragePlayerMadeHandSDFlop, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
389 {
390 SQLiteConnection oldConnection = FFConnection;
391
392 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
393
394 if (FFConnection.State == System.Data.ConnectionState.Closed)
395 FFConnection.Open();
396
397 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
398 {
399 int currentIndex = 0;
400 foreach (CAveragePlayerMadeHandSDFlop avgPlayer in _lstAveragePlayerMadeHandSDFlop)
401 {
402 string sql = "INSERT INTO AveragePlayerMadeHandSDFlop (FlopGameStateID, BoardType, BoardHeat, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?);";
403 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
404
405 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
406 {
407 command.CommandText = sql;
408 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
409 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
410 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
411 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
412 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
413 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
414 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
415 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
416
417 command.ExecuteNonQuery();
418 }
419 }
420
421 transaction.Commit();
422 }
423
424 FFConnection = oldConnection;
425 }
426 public static void InsertAveragePlayerValueHandsFlop(LinkedList<CAveragePlayerValueHandsFlop> _lstAveragePlayerValueHandsFlop)
427 {
428 if (FFConnection.State == System.Data.ConnectionState.Closed)
429 FFConnection.Open();
430
431 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
432 {
433 foreach (CAveragePlayerValueHandsFlop avgPlayer in _lstAveragePlayerValueHandsFlop)
434 {
435 string sql = "INSERT OR REPLACE INTO AveragePlayerValueHandsFlop (FlopGameStateID, BoardType, BoardHeat, HandStrength, SampleCount) VALUES (?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerValueHandsFlop WHERE FlopGameStateID=? AND BoardType=? AND HandStrength=?), 0) + 1);";
436
437 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
438 {
439 command.CommandText = sql;
440 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
441 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
442 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
443 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrength));
444
445 // For the select here
446 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
447 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
448 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrength));
449
450 command.ExecuteNonQuery();
451 }
452 }
453
454 transaction.Commit();
455 }
456 }
457 public static void InsertAveragePlayerValueHandsDebugFlop(LinkedList<CAveragePlayerValueHandsFlop> _lstAveragePlayerValueHandsFlop, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
458 {
459 SQLiteConnection oldConnection = FFConnection;
460
461 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
462
463 if (FFConnection.State == System.Data.ConnectionState.Closed)
464 FFConnection.Open();
465
466 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
467 {
468 int currentIndex = 0;
469 foreach (CAveragePlayerValueHandsFlop avgPlayer in _lstAveragePlayerValueHandsFlop)
470 {
471 string sql = "INSERT INTO AveragePlayerValueHandsFlop (FlopGameStateID, BoardType, BoardHeat, HandStrength, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);";
472 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
473
474 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
475 {
476 command.CommandText = sql;
477 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PFlopGameState.PID));
478 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
479 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
480 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrength));
481 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
482 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
483 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
484 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
485 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
486
487 command.ExecuteNonQuery();
488 }
489 }
490
491 transaction.Commit();
492 }
493
494 FFConnection = oldConnection;
495 }
496 #endregion
497 #region Turn queries
498 public static void InsertAveragePlayerBluffsTurn(LinkedList<CAveragePlayerBluffsTurn> _lstAvgPlayerBluffsTurn)
499 {
500 if (FFConnection.State == System.Data.ConnectionState.Closed)
501 FFConnection.Open();
502
503 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
504 {
505 foreach (CAveragePlayerBluffsTurn avgPlayer in _lstAvgPlayerBluffsTurn)
506 {
507 string sql = "INSERT OR REPLACE INTO AveragePlayerBluffsTurn(TurnGameStateID, BoardType, BoardHeat, SD, FD, IndexHighestCardExcludingBoard, SampleCount) VALUES (?, ?, ?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerBluffsTurn WHERE TurnGameStateID=? AND BoardType=? AND SD=? AND FD=? AND IndexHighestCardExcludingBoard=?), 0) + 1);";
508
509 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
510 {
511 command.CommandText = sql;
512 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
513 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
514 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
515 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsStraightDraw)));
516 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsFlushDraw)));
517 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoard));
518
519 // For the select here
520 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
521 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
522 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsStraightDraw)));
523 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsFlushDraw)));
524 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoard));
525
526 command.ExecuteNonQuery();
527 }
528 }
529
530 transaction.Commit();
531 }
532 }
533 public static void InsertAveragePlayerBluffsTurnDebug(LinkedList<CAveragePlayerBluffsTurn> _lstAvgPlayerBluffsTurn, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
534 {
535 SQLiteConnection oldConnection = FFConnection;
536
537 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
538
539 if (FFConnection.State == System.Data.ConnectionState.Closed)
540 FFConnection.Open();
541
542 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
543 {
544 int currentIndex = 0;
545 foreach (CAveragePlayerBluffsTurn avgPlayer in _lstAvgPlayerBluffsTurn)
546 {
547 string sql = "INSERT INTO AveragePlayerBluffsTurn(TurnGameStateID, BoardType, BoardHeat, SD, FD, IndexHighestCardExcludingBoard, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
548 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
549
550 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
551 {
552 command.CommandText = sql;
553 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
554 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
555 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
556 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsStraightDraw)));
557 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsFlushDraw)));
558 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoard));
559 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
560 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
561 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
562 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
563 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
564
565 command.ExecuteNonQuery();
566 }
567 }
568
569 transaction.Commit();
570 }
571
572 FFConnection = oldConnection;
573 }
574 public static void InsertAveragePlayerBluffsWithALotsOfEquityTurn(LinkedList<CAveragePlayerBluffsWithLotsOfEquityTurn> _lstAveragePlayerBluffsWithLotsOfEquityTurn)
575 {
576 if (FFConnection.State == System.Data.ConnectionState.Closed)
577 FFConnection.Open();
578
579 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
580 {
581 foreach (CAveragePlayerBluffsWithLotsOfEquityTurn avgPlayer in _lstAveragePlayerBluffsWithLotsOfEquityTurn)
582 {
583 string sql = "INSERT OR REPLACE INTO AveragePlayerBluffsWithALotsOfEquityTurn (TurnGameStateID, BoardType, BoardHeat, NbOuts, SampleCount) VALUES (?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerBluffsWithALotsOfEquityTurn WHERE TurnGameStateID=? AND BoardType=? AND NbOuts=?), 0) + 1);";
584
585 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
586 {
587 command.CommandText = sql;
588 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
589 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
590 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
591 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PNumberOfOuts)));
592
593 // For the select here
594 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
595 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
596 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PNumberOfOuts)));
597
598 command.ExecuteNonQuery();
599 }
600 }
601
602 transaction.Commit();
603 }
604 }
605 public static void InsertAveragePlayerBluffsWithALotsOfEquityTurnDebug(LinkedList<CAveragePlayerBluffsWithLotsOfEquityTurn> _lstAveragePlayerBluffsWithLotsOfEquityTurn, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
606 {
607 SQLiteConnection oldConnection = FFConnection;
608
609 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
610
611 if (FFConnection.State == System.Data.ConnectionState.Closed)
612 FFConnection.Open();
613
614 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
615 {
616 int currentIndex = 0;
617 foreach (CAveragePlayerBluffsWithLotsOfEquityTurn avgPlayer in _lstAveragePlayerBluffsWithLotsOfEquityTurn)
618 {
619 string sql = "INSERT INTO AveragePlayerBluffsWithALotsOfEquityTurn (TurnGameStateID, BoardType, BoardHeat, NbOuts, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);";
620 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
621
622 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
623 {
624 command.CommandText = sql;
625 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
626 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
627 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
628 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PNumberOfOuts));
629 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
630 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
631 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
632 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
633 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
634
635 command.ExecuteNonQuery();
636 }
637 }
638
639 transaction.Commit();
640 }
641
642 FFConnection = oldConnection;
643 }
644 public static void InsertAveragePlayerMadeHandSDAndFDTurn(LinkedList<CAveragePlayerMadeHandSDAndFDTurn> _lstAveragePlayerMadeHandSDAndFDTurn)
645 {
646 if (FFConnection.State == System.Data.ConnectionState.Closed)
647 FFConnection.Open();
648
649 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
650 {
651 foreach (CAveragePlayerMadeHandSDAndFDTurn avgPlayer in _lstAveragePlayerMadeHandSDAndFDTurn)
652 {
653 string sql = "INSERT OR REPLACE INTO AveragePlayerMadeHandSDAndFDTurn (TurnGameStateID, BoardType, BoardHeat, SampleCount) VALUES (?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerMadeHandSDAndFDTurn WHERE TurnGameStateID=? AND BoardType=?), 0) + 1);";
654
655 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
656 {
657 command.CommandText = sql;
658 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
659 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
660 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
661
662 // For the select here
663 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
664 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
665
666 command.ExecuteNonQuery();
667 }
668 }
669
670 transaction.Commit();
671 }
672 }
673 public static void InsertAveragePlayerMadeHandSDAndFDTurnDebug(LinkedList<CAveragePlayerMadeHandSDAndFDTurn> _lstAveragePlayerMadeHandSDAndFDTurn, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
674 {
675 SQLiteConnection oldConnection = FFConnection;
676
677 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
678
679 if (FFConnection.State == System.Data.ConnectionState.Closed)
680 FFConnection.Open();
681
682 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
683 {
684 int currentIndex = 0;
685 foreach (CAveragePlayerMadeHandSDAndFDTurn avgPlayer in _lstAveragePlayerMadeHandSDAndFDTurn)
686 {
687 string sql = "INSERT INTO AveragePlayerMadeHandSDAndFDTurn (TurnGameStateID, BoardType, BoardHeat, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?);";
688 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
689
690 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
691 {
692 command.CommandText = sql;
693 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
694 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
695 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
696 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
697 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
698 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
699 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
700 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
701
702 command.ExecuteNonQuery();
703 }
704 }
705
706 transaction.Commit();
707 }
708
709 FFConnection = oldConnection;
710 }
711 public static void InsertAveragePlayerMadeHandFDTurn(LinkedList<CAveragePlayerMadeHandFDTurn> _lstAveragePlayerMadeHandFDTurn)
712 {
713 if (FFConnection.State == System.Data.ConnectionState.Closed)
714 FFConnection.Open();
715
716 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
717 {
718 foreach (CAveragePlayerMadeHandFDTurn avgPlayer in _lstAveragePlayerMadeHandFDTurn)
719 {
720 string sql = "INSERT OR REPLACE INTO AveragePlayerMadeHandFDTurn (TurnGameStateID, BoardType, BoardHeat, IndexHighestCardExcludingBoardOfFlushCard, SampleCount) VALUES (?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerMadeHandFDTurn WHERE TurnGameStateID=? AND BoardType=? AND IndexHighestCardExcludingBoardOfFlushCard=?), 0) + 1);";
721
722 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
723 {
724 command.CommandText = sql;
725 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
726 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
727 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
728 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoardOfFlushCard));
729
730 // For the select here
731 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
732 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
733 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoardOfFlushCard));
734
735 command.ExecuteNonQuery();
736 }
737 }
738
739 transaction.Commit();
740 }
741 }
742 public static void InsertAveragePlayerMadeHandFDTurnDebug(LinkedList<CAveragePlayerMadeHandFDTurn> _lstAveragePlayerMadeHandFDTurn, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
743 {
744 SQLiteConnection oldConnection = FFConnection;
745
746 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
747
748 if (FFConnection.State == System.Data.ConnectionState.Closed)
749 FFConnection.Open();
750
751 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
752 {
753 int currentIndex = 0;
754 foreach (CAveragePlayerMadeHandFDTurn avgPlayer in _lstAveragePlayerMadeHandFDTurn)
755 {
756 string sql = "INSERT INTO AveragePlayerMadeHandFDTurn (TurnGameStateID, BoardType, BoardHeat, IndexHighestCardExcludingBoardOfFlushCard, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);";
757 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
758
759 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
760 {
761 command.CommandText = sql;
762 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
763 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
764 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
765 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoardOfFlushCard));
766 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
767 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
768 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
769 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
770 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
771
772 command.ExecuteNonQuery();
773 }
774 }
775
776 transaction.Commit();
777 }
778
779 FFConnection = oldConnection;
780 }
781 public static void InsertAveragePlayerMadeHandSDTurn(LinkedList<CAveragePlayerMadeHandSDTurn> _lstAveragePlayerMadeHandSDTurn)
782 {
783 if (FFConnection.State == System.Data.ConnectionState.Closed)
784 FFConnection.Open();
785
786 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
787 {
788 foreach (CAveragePlayerMadeHandSDTurn avgPlayer in _lstAveragePlayerMadeHandSDTurn)
789 {
790 string sql = "INSERT OR REPLACE INTO AveragePlayerMadeHandSDTurn (TurnGameStateID, BoardType, BoardHeat, SampleCount) VALUES (?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerMadeHandSDTurn WHERE TurnGameStateID=? AND BoardType=?), 0) + 1);";
791
792 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
793 {
794 command.CommandText = sql;
795 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
796 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
797 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
798
799 // For the select here
800 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
801 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
802
803 command.ExecuteNonQuery();
804 }
805 }
806
807 transaction.Commit();
808 }
809 }
810 public static void InsertAveragePlayerMadeHandSDTurnDebug(LinkedList<CAveragePlayerMadeHandSDTurn> _lstAveragePlayerMadeHandSDTurn, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
811 {
812 SQLiteConnection oldConnection = FFConnection;
813
814 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
815
816 if (FFConnection.State == System.Data.ConnectionState.Closed)
817 FFConnection.Open();
818
819 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
820 {
821 int currentIndex = 0;
822 foreach (CAveragePlayerMadeHandSDTurn avgPlayer in _lstAveragePlayerMadeHandSDTurn)
823 {
824 string sql = "INSERT INTO AveragePlayerMadeHandSDTurn (TurnGameStateID, BoardType, BoardHeat, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?);";
825 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
826
827 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
828 {
829 command.CommandText = sql;
830 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
831 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
832 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
833 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
834 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
835 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
836 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
837 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
838
839 command.ExecuteNonQuery();
840 }
841 }
842
843 transaction.Commit();
844 }
845
846 FFConnection = oldConnection;
847 }
848 public static void InsertAveragePlayerValueHandsTurn(LinkedList<CAveragePlayerValueHandsTurn> _lstAveragePlayerValueHandsTurn)
849 {
850 if (FFConnection.State == System.Data.ConnectionState.Closed)
851 FFConnection.Open();
852
853 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
854 {
855 foreach (CAveragePlayerValueHandsTurn avgPlayer in _lstAveragePlayerValueHandsTurn)
856 {
857 string sql = "INSERT OR REPLACE INTO AveragePlayerValueHandsTurn (TurnGameStateID, BoardType, BoardHeat, HandStrength, SampleCount) VALUES (?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerValueHandsTurn WHERE TurnGameStateID=? AND BoardType=? AND HandStrength=?), 0) + 1);";
858
859 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
860 {
861 command.CommandText = sql;
862 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
863 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
864 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
865 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrength));
866
867 // For the select here
868 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
869 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
870 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrength));
871
872 command.ExecuteNonQuery();
873 }
874 }
875
876 transaction.Commit();
877 }
878 }
879 public static void InsertAveragePlayerValueHandsTurnDebug(LinkedList<CAveragePlayerValueHandsTurn> _lstAveragePlayerValueHandsTurn, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
880 {
881 SQLiteConnection oldConnection = FFConnection;
882
883 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
884
885 if (FFConnection.State == System.Data.ConnectionState.Closed)
886 FFConnection.Open();
887
888 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
889 {
890 int currentIndex = 0;
891 foreach (CAveragePlayerValueHandsTurn avgPlayer in _lstAveragePlayerValueHandsTurn)
892 {
893 string sql = "INSERT INTO AveragePlayerValueHandsTurn (TurnGameStateID, BoardType, BoardHeat, HandStrength, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);";
894 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
895
896 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
897 {
898 command.CommandText = sql;
899 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PTurnGameState.PID));
900 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
901 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
902 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrength));
903 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
904 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
905 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
906 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
907 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
908
909 command.ExecuteNonQuery();
910 }
911 }
912
913 transaction.Commit();
914 }
915
916 FFConnection = oldConnection;
917 }
918 #endregion
919 #region River queries
920 public static void InsertAveragePlayerBluffsRiver(LinkedList<CAveragePlayerBluffsRiver> _lstAvgPlayerBluffsRiver)
921 {
922 if (FFConnection.State == System.Data.ConnectionState.Closed)
923 FFConnection.Open();
924
925 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
926 {
927 foreach (CAveragePlayerBluffsRiver avgPlayer in _lstAvgPlayerBluffsRiver)
928 {
929 string sql = "INSERT OR REPLACE INTO AveragePlayerBluffsRiver(RiverGameStateID, BoardType, BoardHeat, SD, FD, IndexHighestCardExcludingBoard, SampleCount) VALUES (?, ?, ?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerBluffsRiver WHERE RiverGameStateID=? AND BoardType=? AND SD=? AND FD=? AND IndexHighestCardExcludingBoard=?), 0) + 1);";
930
931 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
932 {
933 command.CommandText = sql;
934 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
935 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
936 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
937 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsStraightDraw)));
938 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsFlushDraw)));
939 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoard));
940
941 // For the select here
942 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
943 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
944 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsStraightDraw)));
945 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsFlushDraw)));
946 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoard));
947
948 command.ExecuteNonQuery();
949 }
950 }
951
952 transaction.Commit();
953 }
954 }
955 public static void InsertAveragePlayerBluffsRiverDebug(LinkedList<CAveragePlayerBluffsRiver> _lstAvgPlayerBluffsRiver, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
956 {
957 SQLiteConnection oldConnection = FFConnection;
958
959 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
960
961 if (FFConnection.State == System.Data.ConnectionState.Closed)
962 FFConnection.Open();
963
964 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
965 {
966 int currentIndex = 0;
967 foreach (CAveragePlayerBluffsRiver avgPlayer in _lstAvgPlayerBluffsRiver)
968 {
969 string sql = "INSERT INTO AveragePlayerBluffsRiver(RiverGameStateID, BoardType, BoardHeat, SD, FD, IndexHighestCardExcludingBoard, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
970 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
971
972 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
973 {
974 command.CommandText = sql;
975 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
976 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
977 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
978 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsStraightDraw)));
979 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PIsFlushDraw)));
980 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PIndexHighestCardExcludingBoard));
981 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
982 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
983 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
984 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
985 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
986
987 command.ExecuteNonQuery();
988 }
989 }
990
991 transaction.Commit();
992 }
993
994 FFConnection = oldConnection;
995 }
996 public static void InsertAveragePlayerBluffsWithALotsOfEquityRiver(LinkedList<CAveragePlayerBluffsWithLotsOfEquityRiver> _lstAveragePlayerBluffsWithLotsOfEquityRiver)
997 {
998 if (FFConnection.State == System.Data.ConnectionState.Closed)
999 FFConnection.Open();
1000
1001 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
1002 {
1003 foreach (CAveragePlayerBluffsWithLotsOfEquityRiver avgPlayer in _lstAveragePlayerBluffsWithLotsOfEquityRiver)
1004 {
1005 string sql = "INSERT OR REPLACE INTO AveragePlayerBluffsWithALotsOfEquityRiver (RiverGameStateID, BoardType, BoardHeat, NbOuts, SampleCount) VALUES (?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerBluffsWithALotsOfEquityRiver WHERE RiverGameStateID=? AND BoardType=? AND NbOuts=?), 0) + 1);";
1006
1007 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1008 {
1009 command.CommandText = sql;
1010 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
1011 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
1012 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
1013 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PNumberOfOuts)));
1014
1015 // For the select here
1016 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
1017 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
1018 command.Parameters.Add(new SQLiteParameter("", Convert.ToSByte(avgPlayer.PNumberOfOuts)));
1019
1020 command.ExecuteNonQuery();
1021 }
1022 }
1023
1024 transaction.Commit();
1025 }
1026 }
1027 public static void InsertAveragePlayerBluffsWithALotsOfEquityDebugRiver(LinkedList<CAveragePlayerBluffsWithLotsOfEquityRiver> _lstAveragePlayerBluffsWithLotsOfEquityRiver, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
1028 {
1029 SQLiteConnection oldConnection = FFConnection;
1030
1031 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
1032
1033 if (FFConnection.State == System.Data.ConnectionState.Closed)
1034 FFConnection.Open();
1035
1036 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
1037 {
1038 int currentIndex = 0;
1039 foreach (CAveragePlayerBluffsWithLotsOfEquityRiver avgPlayer in _lstAveragePlayerBluffsWithLotsOfEquityRiver)
1040 {
1041 string sql = "INSERT INTO AveragePlayerBluffsWithALotsOfEquityRiver (RiverGameStateID, BoardType, BoardHeat, NbOuts, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);";
1042 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
1043
1044 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1045 {
1046 command.CommandText = sql;
1047 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
1048 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
1049 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
1050 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PNumberOfOuts));
1051 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
1052 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
1053 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
1054 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
1055 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
1056
1057 command.ExecuteNonQuery();
1058 }
1059 }
1060
1061 transaction.Commit();
1062 }
1063
1064 FFConnection = oldConnection;
1065 }
1066 public static void InsertAveragePlayerMadeHandsBlockersRiver(LinkedList<CAveragePlayerMadeHandBlockerRiver> _lstAveragePlayerMadeHandBlockerRiver)
1067 {
1068 if (FFConnection.State == System.Data.ConnectionState.Closed)
1069 FFConnection.Open();
1070
1071 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
1072 {
1073 foreach (CAveragePlayerMadeHandBlockerRiver avgPlayer in _lstAveragePlayerMadeHandBlockerRiver)
1074 {
1075 string sql = "INSERT OR REPLACE INTO AveragePlayerMadeHandBlockersRiver (RiverGameStateID, BoardType, BoardHeat, BlockerRatio, HandStrengthInBlockerRange, SampleCount) VALUES (?, ?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerMadeHandBlockersRiver WHERE RiverGameStateID=? AND BoardType=? AND BlockerRatio=? AND HandStrengthInBlockerRange=?), 0) + 1);";
1076
1077 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1078 {
1079 command.CommandText = sql;
1080 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
1081 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
1082 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
1083 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBlockerRatio));
1084 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrengthInBlockerRange));
1085
1086 // For the select here
1087 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
1088 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
1089 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBlockerRatio));
1090 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrengthInBlockerRange));
1091
1092 command.ExecuteNonQuery();
1093 }
1094 }
1095
1096 transaction.Commit();
1097 }
1098 }
1099 public static void InsertAveragePlayerMadeHandsBlockersDebugRiver(LinkedList<CAveragePlayerMadeHandBlockerRiver> _lstAveragePlayerMadeHandBlockerRiver, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
1100 {
1101 SQLiteConnection oldConnection = FFConnection;
1102
1103 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
1104
1105 if (FFConnection.State == System.Data.ConnectionState.Closed)
1106 FFConnection.Open();
1107
1108 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
1109 {
1110 int currentIndex = 0;
1111 foreach (CAveragePlayerMadeHandBlockerRiver avgPlayer in _lstAveragePlayerMadeHandBlockerRiver)
1112 {
1113 string sql = "INSERT OR REPLACE INTO AveragePlayerMadeHandBlockersRiver (RiverGameStateID, BoardType, BoardHeat, BlockerRatio, HandStrengthInBlockerRange, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
1114 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
1115
1116 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1117 {
1118 command.CommandText = sql;
1119 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
1120 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
1121 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
1122 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBlockerRatio));
1123 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrengthInBlockerRange));
1124 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
1125 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
1126 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
1127 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
1128 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
1129
1130 command.ExecuteNonQuery();
1131 }
1132 }
1133
1134 transaction.Commit();
1135 }
1136
1137 FFConnection = oldConnection;
1138 }
1139 public static void InsertAveragePlayerValueHandsRiver(LinkedList<CAveragePlayerValueHandsRiver> _lstAveragePlayerValueHandsRiver)
1140 {
1141 if (FFConnection.State == System.Data.ConnectionState.Closed)
1142 FFConnection.Open();
1143
1144 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
1145 {
1146 foreach (CAveragePlayerValueHandsRiver avgPlayer in _lstAveragePlayerValueHandsRiver)
1147 {
1148 string sql = "INSERT OR REPLACE INTO AveragePlayerValueHandsRiver (RiverGameStateID, BoardType, BoardHeat, HandStrength, SampleCount) VALUES (?, ?, ?, ?, COALESCE((SELECT SampleCount FROM AveragePlayerValueHandsRiver WHERE RiverGameStateID=? AND BoardType=? AND HandStrength=?), 0) + 1);";
1149
1150 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1151 {
1152 command.CommandText = sql;
1153 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
1154 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
1155 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
1156 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrength));
1157
1158 // For the select here
1159 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
1160 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
1161 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrength));
1162
1163 command.ExecuteNonQuery();
1164 }
1165 }
1166
1167 transaction.Commit();
1168 }
1169 }
1170 public static void InsertAveragePlayerValueHandsDebugRiver(LinkedList<CAveragePlayerValueHandsRiver> _lstAveragePlayerValueHandsRiver, List<CDebugGeneralHandInfos> _lstGeneralHandInfos)
1171 {
1172 SQLiteConnection oldConnection = FFConnection;
1173
1174 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
1175
1176 if (FFConnection.State == System.Data.ConnectionState.Closed)
1177 FFConnection.Open();
1178
1179 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
1180 {
1181 int currentIndex = 0;
1182 foreach (CAveragePlayerValueHandsRiver avgPlayer in _lstAveragePlayerValueHandsRiver)
1183 {
1184 string sql = "INSERT OR REPLACE INTO AveragePlayerValueHandsRiver (RiverGameStateID, BoardType, BoardHeat, HandStrength, HandMask, BoardMask, HandDescription, BoardDescription, HandHistory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);";
1185 CDebugGeneralHandInfos currentHandInfos = _lstGeneralHandInfos[currentIndex++];
1186
1187 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1188 {
1189 command.CommandText = sql;
1190 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PRiverGameState.PID));
1191 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardType));
1192 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PBoardHeat));
1193 command.Parameters.Add(new SQLiteParameter("", avgPlayer.PHandStrength));
1194 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PPocketMask));
1195 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardMask));
1196 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandDescription));
1197 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PBoardDescription));
1198 command.Parameters.Add(new SQLiteParameter("", currentHandInfos.PHandHistory));
1199
1200 command.ExecuteNonQuery();
1201 }
1202 }
1203
1204 transaction.Commit();
1205 }
1206
1207 FFConnection = oldConnection;
1208 }
1209 #endregion
1210 #endregion
1211 #endregion
1212 #region Select queries
1213 #region Flop queries
1214 public static void LoadAllGameStates()
1215 {
1216 if (FFConnection.State == System.Data.ConnectionState.Closed)
1217 FFConnection.Open();
1218
1219 string sql = "SELECT * FROM FlopAllGameStates;";
1220
1221 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1222 {
1223 using (SQLiteDataReader reader = command.ExecuteReader())
1224 {
1225 while (reader.Read())
1226 {
1227 long ID = reader.GetFieldData<long>(0);
1228 TypesPot typePot = reader.GetFieldData<TypesPot>(1);
1229 PossiblePositions possiblePosition = reader.GetFieldData<PossiblePositions>(2);
1230 ActionsPossible typeAction = reader.GetFieldData<ActionsPossible>(3);
1231 BetSizePossible? typeBet = reader.GetFieldData<BetSizePossible?>(4);
1232
1233 CFlopGameState flopGameState = new CFlopGameState(ID, typePot, possiblePosition, typeAction, typeBet);
1234 FFDicAllFlopGameStatesByID.Add(ID, flopGameState);
1235 FFDicAllFlopGameStatesByInfos.Add(new Tuple<TypesPot, PossiblePositions, ActionsPossible, BetSizePossible?>(typePot, possiblePosition, typeAction, typeBet), flopGameState);
1236 }
1237 }
1238 }
1239
1240 sql = "SELECT * FROM TurnAllGameStates;";
1241 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1242 {
1243 using (SQLiteDataReader reader = command.ExecuteReader())
1244 {
1245 while (reader.Read())
1246 {
1247 long ID = reader.GetFieldData<long>(0);
1248 long flopGameStateID = reader.GetFieldData<long>(1);
1249 ActionsPossible typeAction = reader.GetFieldData<ActionsPossible>(2);
1250 BetSizePossible? typeBet = reader.GetFieldData<BetSizePossible?>(3);
1251
1252 CTurnGameState turnGameState = new CTurnGameState(ID, FFDicAllFlopGameStatesByID[flopGameStateID], typeAction, typeBet);
1253 FFDicAllTurnGameStatesByID.Add(ID, turnGameState);
1254 FFDicAllTurnGameStatesByInfos.Add(new Tuple<CFlopGameState, ActionsPossible, BetSizePossible?>(FFDicAllFlopGameStatesByID[flopGameStateID], typeAction, typeBet), turnGameState);
1255 }
1256 }
1257 }
1258
1259 sql = "SELECT * FROM RiverAllGameStates;";
1260 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1261 {
1262 using (SQLiteDataReader reader = command.ExecuteReader())
1263 {
1264 while (reader.Read())
1265 {
1266 long ID = reader.GetFieldData<long>(0);
1267 long turnGameStateID = reader.GetFieldData<long>(1);
1268 ActionsPossible typeAction = reader.GetFieldData<ActionsPossible>(2);
1269 BetSizePossible? typeBet = reader.GetFieldData<BetSizePossible?>(3);
1270
1271 CRiverGameState riverGameState = new CRiverGameState(ID, FFDicAllTurnGameStatesByID[turnGameStateID], typeAction, typeBet);
1272 FFDicAllRiverGameStatesByID.Add(ID, riverGameState);
1273 FFDicAllRiverGameStatesByInfos.Add(new Tuple<CTurnGameState, ActionsPossible, BetSizePossible?>(FFDicAllTurnGameStatesByID[turnGameStateID], typeAction, typeBet), riverGameState);
1274 }
1275 }
1276 }
1277 }
1278 public static void LoadAllAveragePlayerBluffsFlop()
1279 {
1280 if (FFConnection.State == System.Data.ConnectionState.Closed)
1281 FFConnection.Open();
1282
1283 string sql = "SELECT * FROM AveragePlayerBluffsFlop;";
1284 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1285 {
1286 using (SQLiteDataReader reader = command.ExecuteReader())
1287 {
1288 while (reader.Read())
1289 {
1290 CFlopGameState flopGameState = FFDicAllFlopGameStatesByID[reader.GetFieldData<long>(0)];
1291 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1292 bool isBDFD = reader.GetFieldData<bool>(3);
1293 bool isBDSD = reader.GetFieldData<bool>(4);
1294 bool isSD = reader.GetFieldData<bool>(5);
1295 bool isFD = reader.GetFieldData<bool>(6);
1296 sbyte index = reader.GetFieldData<sbyte>(7);
1297
1298 // insert here
1299 }
1300 }
1301 }
1302 }
1303 public static void LoadAllAveragePlayerBluffsTurn()
1304 {
1305 if (FFConnection.State == System.Data.ConnectionState.Closed)
1306 FFConnection.Open();
1307
1308 string sql = "SELECT * FROM AveragePlayerBluffsTurn;";
1309 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1310 {
1311 using (SQLiteDataReader reader = command.ExecuteReader())
1312 {
1313 while (reader.Read())
1314 {
1315 CTurnGameState turnGameState = FFDicAllTurnGameStatesByID[reader.GetFieldData<long>(0)];
1316 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1317 bool isSD = reader.GetFieldData<bool>(5);
1318 bool isFD = reader.GetFieldData<bool>(6);
1319 sbyte index = reader.GetFieldData<sbyte>(7);
1320
1321 // insert here
1322 }
1323 }
1324 }
1325 }
1326 public static void LoadAllAveragePlayerBluffsRiver()
1327 {
1328 if (FFConnection.State == System.Data.ConnectionState.Closed)
1329 FFConnection.Open();
1330
1331 string sql = "SELECT * FROM AveragePlayerBluffsRiver;";
1332 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1333 {
1334 using (SQLiteDataReader reader = command.ExecuteReader())
1335 {
1336 while (reader.Read())
1337 {
1338 CRiverGameState riverGameState = FFDicAllRiverGameStatesByID[reader.GetFieldData<long>(0)];
1339 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1340 bool isSD = reader.GetFieldData<bool>(5);
1341 bool isFD = reader.GetFieldData<bool>(6);
1342 sbyte index = reader.GetFieldData<sbyte>(7);
1343
1344 // insert here
1345 }
1346 }
1347 }
1348 }
1349
1350 public static void LoadAllAveragePlayerWithALotsOfEquityFlop()
1351 {
1352 if (FFConnection.State == System.Data.ConnectionState.Closed)
1353 FFConnection.Open();
1354
1355 string sql = "SELECT * FROM AveragePlayerWithALotsOfEquityFlop;";
1356 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1357 {
1358 using (SQLiteDataReader reader = command.ExecuteReader())
1359 {
1360 while (reader.Read())
1361 {
1362 CFlopGameState flopGameState = FFDicAllFlopGameStatesByID[reader.GetFieldData<long>(0)];
1363 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1364 sbyte numberOfOuts = reader.GetFieldData<sbyte>(3);
1365 int sampleCount = reader.GetFieldData<int>(4);
1366
1367 // insert here
1368 }
1369 }
1370 }
1371 }
1372
1373 public static void LoadAllAveragePlayerWithALotsOfEquityTurn()
1374 {
1375 if (FFConnection.State == System.Data.ConnectionState.Closed)
1376 FFConnection.Open();
1377
1378 string sql = "SELECT * FROM AveragePlayerWithALotsOfEquityTurn;";
1379 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1380 {
1381 using (SQLiteDataReader reader = command.ExecuteReader())
1382 {
1383 while (reader.Read())
1384 {
1385 CTurnGameState turnGameState = FFDicAllTurnGameStatesByID[reader.GetFieldData<long>(0)];
1386 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1387 sbyte numberOfOuts = reader.GetFieldData<sbyte>(3);
1388 int sampleCount = reader.GetFieldData<int>(4);
1389
1390 // insert here
1391 }
1392 }
1393 }
1394 }
1395
1396 public static void LoadAllAveragePlayerWithALotsOfEquityRiver()
1397 {
1398 if (FFConnection.State == System.Data.ConnectionState.Closed)
1399 FFConnection.Open();
1400
1401 string sql = "SELECT * FROM AveragePlayerWithALotsOfEquityRiver;";
1402 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1403 {
1404 using (SQLiteDataReader reader = command.ExecuteReader())
1405 {
1406 while (reader.Read())
1407 {
1408 CRiverGameState riverGameState = FFDicAllRiverGameStatesByID[reader.GetFieldData<long>(0)];
1409 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1410 sbyte numberOfOuts = reader.GetFieldData<sbyte>(3);
1411 int sampleCount = reader.GetFieldData<int>(4);
1412
1413 // insert here
1414 }
1415 }
1416 }
1417 }
1418
1419 public static void LoadAllAveragePlayerMadeHandBlockersRiver()
1420 {
1421 if (FFConnection.State == System.Data.ConnectionState.Closed)
1422 FFConnection.Open();
1423
1424 string sql = "SELECT * FROM AveragePlayerMadeHandBlockersRiver;";
1425 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1426 {
1427 using (SQLiteDataReader reader = command.ExecuteReader())
1428 {
1429 while (reader.Read())
1430 {
1431 CRiverGameState riverGameState = FFDicAllRiverGameStatesByID[reader.GetFieldData<long>(0)];
1432 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1433 double blockerRatio = reader.GetFieldData<double>(3);
1434 double handStrengthInBlocker = reader.GetFieldData<double>(4);
1435 int sampleCount = reader.GetFieldData<int>(5);
1436 // insert here
1437 }
1438 }
1439 }
1440 }
1441
1442 public static void LoadAllAveragePlayerMadeHandFDFlop()
1443 {
1444 if (FFConnection.State == System.Data.ConnectionState.Closed)
1445 FFConnection.Open();
1446
1447 string sql = "SELECT * FROM AveragePlayerMadeHandFDFlop;";
1448 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1449 {
1450 using (SQLiteDataReader reader = command.ExecuteReader())
1451 {
1452 while (reader.Read())
1453 {
1454 CFlopGameState flopGameState = FFDicAllFlopGameStatesByID[reader.GetFieldData<long>(0)];
1455 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1456 sbyte index = reader.GetFieldData<sbyte>(3);
1457 int sampleCount = reader.GetFieldData<int>(4);
1458 // insert here
1459 }
1460 }
1461 }
1462 }
1463
1464 public static void LoadAllAveragePlayerMadeHandSDAndFDFlop()
1465 {
1466 if (FFConnection.State == System.Data.ConnectionState.Closed)
1467 FFConnection.Open();
1468
1469 string sql = "SELECT * FROM AveragePlayerMadeHandSDAndFDFlop;";
1470 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1471 {
1472 using (SQLiteDataReader reader = command.ExecuteReader())
1473 {
1474 while (reader.Read())
1475 {
1476 CFlopGameState flopGameState = FFDicAllFlopGameStatesByID[reader.GetFieldData<long>(0)];
1477 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1478 int sampleCount = reader.GetFieldData<int>(3);
1479 // insert here
1480 }
1481 }
1482 }
1483 }
1484
1485 public static void LoadAllAveragePlayerMadeHandSDFlop()
1486 {
1487 if (FFConnection.State == System.Data.ConnectionState.Closed)
1488 FFConnection.Open();
1489
1490 string sql = "SELECT * FROM AveragePlayerMadeHandSDFlop;";
1491 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1492 {
1493 using (SQLiteDataReader reader = command.ExecuteReader())
1494 {
1495 while (reader.Read())
1496 {
1497 CFlopGameState flopGameState = FFDicAllFlopGameStatesByID[reader.GetFieldData<long>(0)];
1498 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1499 int sampleCount = reader.GetFieldData<int>(3);
1500 // insert here
1501 }
1502 }
1503 }
1504 }
1505
1506 public static void LoadAllAveragePlayerValueHandsFlop()
1507 {
1508 if (FFConnection.State == System.Data.ConnectionState.Closed)
1509 FFConnection.Open();
1510
1511 string sql = "SELECT * FROM AveragePlayerValueHandsFlop;";
1512 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1513 {
1514 using (SQLiteDataReader reader = command.ExecuteReader())
1515 {
1516 while (reader.Read())
1517 {
1518 CFlopGameState flopGameState = FFDicAllFlopGameStatesByID[reader.GetFieldData<long>(0)];
1519 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1520 double handStrength = reader.GetFieldData<double>(3);
1521 int sampleCount = reader.GetFieldData<int>(4);
1522 // insert here
1523 }
1524 }
1525 }
1526 }
1527
1528 public static void LoadAllAveragePlayerValueHandsRiver()
1529 {
1530 if (FFConnection.State == System.Data.ConnectionState.Closed)
1531 FFConnection.Open();
1532
1533 string sql = "SELECT * FROM AveragePlayerValueHandsRiver;";
1534 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1535 {
1536 using (SQLiteDataReader reader = command.ExecuteReader())
1537 {
1538 while (reader.Read())
1539 {
1540 CRiverGameState riverGameState = FFDicAllRiverGameStatesByID[reader.GetFieldData<long>(0)];
1541 BoardMetaDataFlags boardType = reader.GetFieldData<BoardMetaDataFlags>(1);
1542 double handStrength = reader.GetFieldData<double>(3);
1543 int sampleCount = reader.GetFieldData<int>(4);
1544 // insert here
1545 }
1546 }
1547 }
1548 }
1549 #endregion
1550 #region Turn queries
1551 #endregion
1552 #region River queries
1553 #endregion
1554 #endregion
1555 private static SQLiteConnection GetConnection(string _dbPath = @"C:\\AveragePlayerDB\\PlayersInfosDB.amigo")
1556 {
1557 if (!File.Exists(_dbPath))
1558 SQLiteConnection.CreateFile(_dbPath);
1559
1560 SQLiteConnection dbConnection = new SQLiteConnection("Data Source=" + _dbPath + ";Version=3;");
1561
1562 return dbConnection;
1563 }
1564
1565 #region Create table if not exist queries
1566 #region Preflop
1567 public static void CreateAveragePlayerPreflopRangesTableIfNotExist()
1568 {
1569 string sqlBluffs = "CREATE TABLE IF NOT EXISTS AveragePlayerPreflopRanges (TypePot INTEGER(1) NOT NULL,Position INTEGER(1) NOT NULL,PocketMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(TypePot, Position, PocketMask));";
1570
1571 if (FFConnection.State == System.Data.ConnectionState.Closed)
1572 FFConnection.Open();
1573
1574 try
1575 {
1576 using (SQLiteCommand command = new SQLiteCommand(sqlBluffs, FFConnection))
1577 command.ExecuteNonQuery();
1578 }
1579 finally
1580 {
1581 FFConnection.Close();
1582 }
1583 }
1584 #endregion
1585 #region Flop queries
1586 public static void CreateFlopAllGameStatesTableIfNotExist(bool _createOnDebugDatabase)
1587 {
1588 List<CFlopGameState> lstFlopGameStates = new List<CFlopGameState>(80);
1589 void InitializeDefaultData()
1590 {
1591 void InsertFlopGameState(CFlopGameState _flopGameState)
1592 {
1593 lstFlopGameStates.Add(_flopGameState);
1594 if (FFConnection.State == System.Data.ConnectionState.Closed)
1595 FFConnection.Open();
1596
1597 string sqlLocal = "INSERT INTO FlopAllGameStates (TypePot, Position, TypeAction, TypeBet) values (?, ?, ?, ?);";
1598 using (SQLiteCommand command = new SQLiteCommand(sqlLocal, FFConnection))
1599 {
1600 command.Parameters.Add(new SQLiteParameter("TypePot", _flopGameState.PTypePot));
1601 command.Parameters.Add(new SQLiteParameter("Position", _flopGameState.PPosition));
1602 command.Parameters.Add(new SQLiteParameter("TypeAction", _flopGameState.PTypeAction));
1603
1604 switch (_flopGameState.PTypeAction)
1605 {
1606 case CAction.ActionsPossible.Call:
1607 case CAction.ActionsPossible.Bet:
1608 case CAction.ActionsPossible.Raise:
1609 command.Parameters.Add(new SQLiteParameter("TypeBet", _flopGameState.PTypeBet));
1610 break;
1611 case CAction.ActionsPossible.Check:
1612 case CAction.ActionsPossible.ReRaise:
1613 command.Parameters.Add(new SQLiteParameter("TypeBet", DBNull.Value));
1614 break;
1615 default:
1616 throw new NotImplementedException("The action None and the action Fold is not allowed");
1617 }
1618
1619 command.ExecuteNonQuery();
1620 }
1621 }
1622 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
1623 {
1624 int i = 1;
1625 // Insert all possible game action
1626 foreach (TypesPot currentTypePot in Enum.GetValues(typeof(TypesPot)))
1627 {
1628 if (currentTypePot != TypesPot.OneBet && currentTypePot != TypesPot.FiveBetEtPlus && currentTypePot != TypesPot.Limped && currentTypePot != TypesPot.RaisedLimped && currentTypePot != TypesPot.LimpedThreeBet)
1629 {
1630 foreach (PossiblePositions currentPosition in Enum.GetValues(typeof(PossiblePositions)))
1631 {
1632 if (currentPosition != PossiblePositions.Unknown)
1633 {
1634 foreach (ActionsPossible currentAction in Enum.GetValues(typeof(ActionsPossible)))
1635 {
1636 if (currentAction == ActionsPossible.Check || currentAction == ActionsPossible.ReRaise)
1637 {
1638 if (currentAction == ActionsPossible.ReRaise && currentTypePot == TypesPot.TwoBet)
1639 InsertFlopGameState(new CFlopGameState(i++, currentTypePot, currentPosition, currentAction, null));
1640 else if (currentAction == ActionsPossible.Check)
1641 InsertFlopGameState(new CFlopGameState(i++, currentTypePot, currentPosition, currentAction, null));
1642 }
1643 else if (currentAction == ActionsPossible.Bet || currentAction == ActionsPossible.Raise || currentAction == ActionsPossible.Call)
1644 {
1645 foreach (BetSizePossible currentBetSize in Enum.GetValues(typeof(BetSizePossible)))
1646 {
1647 bool canContinue = false;
1648 switch (currentTypePot)
1649 {
1650 case TypesPot.ThreeBet:
1651 if (currentAction == ActionsPossible.Bet || currentAction == ActionsPossible.Call)
1652 canContinue = (currentBetSize != BetSizePossible.Percent133 && currentBetSize != BetSizePossible.Percent100);
1653 else if (currentAction == ActionsPossible.Raise)
1654 canContinue = (currentBetSize != BetSizePossible.Percent133 && currentBetSize != BetSizePossible.Percent100 && currentBetSize != BetSizePossible.Percent72 && currentBetSize != BetSizePossible.Percent50);
1655 break;
1656 case TypesPot.FourBet:
1657 if (currentAction == ActionsPossible.Bet || currentAction == ActionsPossible.Call)
1658 canContinue = (currentBetSize != BetSizePossible.Percent133 && currentBetSize != BetSizePossible.Percent100 && currentBetSize != BetSizePossible.Percent72);
1659 else if (currentAction == ActionsPossible.Raise)
1660 canContinue = (currentBetSize != BetSizePossible.Percent133 && currentBetSize != BetSizePossible.Percent100 && currentBetSize != BetSizePossible.Percent72 && currentBetSize != BetSizePossible.Percent50);
1661 break;
1662 default:
1663 canContinue = true;
1664 break;
1665 }
1666
1667 if (canContinue)
1668 InsertFlopGameState(new CFlopGameState(i++, currentTypePot, currentPosition, currentAction, currentBetSize));
1669 }
1670 }
1671 }
1672 }
1673 }
1674 }
1675 }
1676 transaction.Commit();
1677 }
1678 }
1679
1680 string sql = "CREATE TABLE IF NOT EXISTS FlopAllGameStates (ID INTEGER PRIMARY KEY ASC,TypePot INTEGER NOT NULL,Position INTEGER NOT NULL,TypeAction INTEGER NOT NULL,TypeBet INTEGER);SELECT count(*) FROM FlopAllGameStates;";
1681
1682 SQLiteConnection oldConnection = FFConnection;
1683
1684 if (_createOnDebugDatabase)
1685 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
1686
1687 if (FFConnection.State == System.Data.ConnectionState.Closed)
1688 FFConnection.Open();
1689
1690 try
1691 {
1692 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1693 {
1694 using (SQLiteDataReader reader = command.ExecuteReader())
1695 {
1696 if (reader.Read())
1697 {
1698 if ((long)reader[0] == 0)
1699 InitializeDefaultData();
1700 }
1701 else
1702 throw new Exception("Unable to read FlopAllGameStates table! Was the table created?");
1703 }
1704 }
1705 }
1706 finally
1707 {
1708 FFConnection.Close();
1709 FFConnection = oldConnection;
1710 }
1711
1712 CreateTurnAllGameStatesTableIfNotExist(lstFlopGameStates, _createOnDebugDatabase);
1713 }
1714 public static void CreateAllAveragePlayerStatsFlopTableIfNotExist()
1715 {
1716 string sqlBluffs = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,BDFD INTEGER(1) NOT NULL,BDSD INTEGER(1) NOT NULL,SD INTEGER(1) NOT NULL,FD INTEGER(1) NOT NULL,IndexHighestCardExcludingBoard INTEGER(1) NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(FlopGameStateID, BoardType, BDFD, BDSD, SD, FD, IndexHighestCardExcludingBoard),FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1717 string sqlBluffWithLotsOfEquity = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsWithALotsOfEquityFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,NbOuts INTEGER(1) NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(FlopGameStateID, BoardType, NbOuts),FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1718 string sqlAveragePlayerMadeHandSDAndFDFlop = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandSDAndFDFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(FlopGameStateID, BoardType),FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1719 string sqlAveragePlayerMadeHandFDFlop = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandFDFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,IndexHighestCardExcludingBoardOfFlushCard INTEGER(1),SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(FlopGameStateID, BoardType, IndexHighestCardExcludingBoardOfFlushCard),FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1720 string sqlAveragePlayerMadeHandSDFlop = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandSDFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(FlopGameStateID, BoardType),FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1721 string sqlValueHands = "CREATE TABLE IF NOT EXISTS AveragePlayerValueHandsFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,HandStrength REAL NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(FlopGameStateID, BoardType, HandStrength),FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1722
1723 if (FFConnection.State == System.Data.ConnectionState.Closed)
1724 FFConnection.Open();
1725
1726 try
1727 {
1728 using (SQLiteCommand command = new SQLiteCommand(sqlBluffs, FFConnection))
1729 command.ExecuteNonQuery();
1730
1731 using (SQLiteCommand command = new SQLiteCommand(sqlBluffWithLotsOfEquity, FFConnection))
1732 command.ExecuteNonQuery();
1733
1734 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandSDAndFDFlop, FFConnection))
1735 command.ExecuteNonQuery();
1736
1737 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandFDFlop, FFConnection))
1738 command.ExecuteNonQuery();
1739
1740 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandSDFlop, FFConnection))
1741 command.ExecuteNonQuery();
1742
1743 using (SQLiteCommand command = new SQLiteCommand(sqlValueHands, FFConnection))
1744 command.ExecuteNonQuery();
1745 }
1746 finally
1747 {
1748 FFConnection.Close();
1749 }
1750
1751 #region Create debug database
1752 using (SQLiteConnection sqlConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo"))
1753 {
1754 sqlBluffs = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,BDFD INTEGER(1) NOT NULL,BDSD INTEGER(1) NOT NULL,SD INTEGER(1) NOT NULL,FD INTEGER(1) NOT NULL,IndexHighestCardExcludingBoard INTEGER(1) NOT NULL,HandMask INTEGER,BoardMask INTEGER,HandDescription TEXT,BoardDescription TEXT,HandHistory TEXT,FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1755 sqlBluffWithLotsOfEquity = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsWithALotsOfEquityFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,NbOuts INTEGER(1) NOT NULL,HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1756 sqlAveragePlayerMadeHandSDAndFDFlop = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandSDAndFDFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1757 sqlAveragePlayerMadeHandFDFlop = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandFDFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,IndexHighestCardExcludingBoardOfFlushCard INTEGER(1),HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1758 sqlAveragePlayerMadeHandSDFlop = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandSDFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1759 sqlValueHands = "CREATE TABLE IF NOT EXISTS AveragePlayerValueHandsFlop (FlopGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,HandStrength REAL NOT NULL,HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));";
1760
1761 if (sqlConnection.State == System.Data.ConnectionState.Closed)
1762 sqlConnection.Open();
1763
1764 try
1765 {
1766 using (SQLiteCommand command = new SQLiteCommand(sqlBluffs, sqlConnection))
1767 command.ExecuteNonQuery();
1768
1769 using (SQLiteCommand command = new SQLiteCommand(sqlBluffWithLotsOfEquity, sqlConnection))
1770 command.ExecuteNonQuery();
1771
1772 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandSDAndFDFlop, sqlConnection))
1773 command.ExecuteNonQuery();
1774
1775 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandFDFlop, sqlConnection))
1776 command.ExecuteNonQuery();
1777
1778 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandSDFlop, sqlConnection))
1779 command.ExecuteNonQuery();
1780
1781 using (SQLiteCommand command = new SQLiteCommand(sqlValueHands, sqlConnection))
1782 command.ExecuteNonQuery();
1783 }
1784 finally
1785 {
1786 sqlConnection.Close();
1787 }
1788 }
1789 #endregion
1790 }
1791 #endregion
1792 #region Turn
1793 private static void CreateTurnAllGameStatesTableIfNotExist(List<CFlopGameState> _lstFlopGameState, bool _createOnDebugDatabase)
1794 {
1795 List<CTurnGameState> lstTurnGameState = new List<CTurnGameState>(50000);
1796 void InitializeDefaultData()
1797 {
1798 void InsertTurnGameState(CTurnGameState _turnGameState)
1799 {
1800 lstTurnGameState.Add(_turnGameState);
1801 if (FFConnection.State == System.Data.ConnectionState.Closed)
1802 FFConnection.Open();
1803
1804 string sqlLocal = "INSERT INTO TurnAllGameStates (FlopGameStateID, TypeAction, TypeBet) values (?, ?, ?);";
1805 using (SQLiteCommand command = new SQLiteCommand(sqlLocal, FFConnection))
1806 {
1807 command.Parameters.Add(new SQLiteParameter("FlopGameStateID", _turnGameState.PFlopGameStateID.PID));
1808 command.Parameters.Add(new SQLiteParameter("TypeAction", _turnGameState.PTypeAction));
1809
1810 switch (_turnGameState.PTypeAction)
1811 {
1812 case CAction.ActionsPossible.Call:
1813 case CAction.ActionsPossible.Bet:
1814 case CAction.ActionsPossible.Raise:
1815 command.Parameters.Add(new SQLiteParameter("TypeBet", _turnGameState.PTypeBet));
1816 break;
1817 case CAction.ActionsPossible.Check:
1818 case CAction.ActionsPossible.ReRaise:
1819 command.Parameters.Add(new SQLiteParameter("TypeBet", DBNull.Value));
1820 break;
1821 default:
1822 throw new NotImplementedException("The action None and the action Fold is not allowed");
1823 }
1824
1825 command.ExecuteNonQuery();
1826 }
1827 }
1828 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
1829 {
1830 int i = 1;
1831 // Insert all possible game action
1832 foreach (CFlopGameState flopGameState in _lstFlopGameState)
1833 {
1834 TypesPot currentTypePot = flopGameState.PTypePot;
1835
1836 if (currentTypePot != TypesPot.OneBet && currentTypePot != TypesPot.FiveBetEtPlus && currentTypePot != TypesPot.Limped && currentTypePot != TypesPot.RaisedLimped && currentTypePot != TypesPot.LimpedThreeBet)
1837 {
1838 foreach (ActionsPossible currentAction in Enum.GetValues(typeof(ActionsPossible)))
1839 {
1840 if (currentAction == ActionsPossible.Check || currentAction == ActionsPossible.ReRaise)
1841 {
1842 if (currentAction == ActionsPossible.ReRaise && currentTypePot == TypesPot.TwoBet)
1843 InsertTurnGameState(new CTurnGameState(i++, flopGameState, currentAction, null));
1844 else if (currentAction == ActionsPossible.Check)
1845 InsertTurnGameState(new CTurnGameState(i++, flopGameState, currentAction, null));
1846 }
1847 else if (currentAction == ActionsPossible.Bet || currentAction == ActionsPossible.Raise || currentAction == ActionsPossible.Call)
1848 {
1849 foreach (BetSizePossible currentBetSize in Enum.GetValues(typeof(BetSizePossible)))
1850 {
1851 bool canContinue = false;
1852 switch (currentTypePot)
1853 {
1854 case TypesPot.ThreeBet:
1855 if (currentAction == ActionsPossible.Bet || currentAction == ActionsPossible.Call)
1856 canContinue = (currentBetSize != BetSizePossible.Percent133 && currentBetSize != BetSizePossible.Percent100);
1857 else if (currentAction == ActionsPossible.Raise)
1858 canContinue = (currentBetSize != BetSizePossible.Percent133 && currentBetSize != BetSizePossible.Percent100 && currentBetSize != BetSizePossible.Percent72 && currentBetSize != BetSizePossible.Percent50);
1859 break;
1860 case TypesPot.FourBet:
1861 if (currentAction == ActionsPossible.Bet || currentAction == ActionsPossible.Call)
1862 canContinue = (currentBetSize != BetSizePossible.Percent133 && currentBetSize != BetSizePossible.Percent100 && currentBetSize != BetSizePossible.Percent72 && currentBetSize != BetSizePossible.Percent50);
1863 else if (currentAction == ActionsPossible.Raise)
1864 canContinue = (currentBetSize == BetSizePossible.AllIn); // Any raise size is considered the same here
1865 break;
1866 default:
1867 canContinue = true;
1868 break;
1869 }
1870
1871 if (canContinue)
1872 InsertTurnGameState(new CTurnGameState(i++, flopGameState, currentAction, currentBetSize));
1873 }
1874 }
1875 }
1876 }
1877
1878 }
1879 transaction.Commit();
1880 }
1881 }
1882
1883 string sql = "CREATE TABLE IF NOT EXISTS TurnAllGameStates (ID INTEGER PRIMARY KEY ASC,FlopGameStateID INTEGER, TypeAction INTEGER NOT NULL,TypeBet INTEGER, FOREIGN KEY(FlopGameStateID) REFERENCES FlopAllGameStates(ID));SELECT count(*) FROM TurnAllGameStates;";
1884
1885 SQLiteConnection oldConnection = FFConnection;
1886
1887 if (_createOnDebugDatabase)
1888 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
1889
1890 if (FFConnection.State == System.Data.ConnectionState.Closed)
1891 FFConnection.Open();
1892
1893 try
1894 {
1895 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
1896 {
1897 using (SQLiteDataReader reader = command.ExecuteReader())
1898 {
1899 if (reader.Read())
1900 {
1901 if ((long)reader[0] == 0)
1902 InitializeDefaultData();
1903 }
1904 else
1905 throw new Exception("Unable to read TurnAllGameStates table! Was the table created?");
1906 }
1907 }
1908 }
1909 finally
1910 {
1911 FFConnection.Close();
1912 FFConnection = oldConnection;
1913 }
1914
1915 CreateRiverAllGameStatesTableIfNotExist(lstTurnGameState, _createOnDebugDatabase);
1916 }
1917 public static void CreateAllAveragePlayerStatsTurnTableIfNotExist()
1918 {
1919 string sqlBluffs = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,SD INTEGER(1) NOT NULL,FD INTEGER(1) NOT NULL,IndexHighestCardExcludingBoard INTEGER(1) NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(TurnGameStateID, BoardType, SD, FD, IndexHighestCardExcludingBoard),FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1920 string sqlBluffWithLotsOfEquity = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsWithALotsOfEquityTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,NbOuts INTEGER(1) NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(TurnGameStateID, BoardType, NbOuts),FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1921 string sqlAveragePlayerMadeHandSDAndFDTurn = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandSDAndFDTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(TurnGameStateID, BoardType),FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1922 string sqlAveragePlayerMadeHandFDTurn = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandFDTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,IndexHighestCardExcludingBoardOfFlushCard INTEGER(1),SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(TurnGameStateID, BoardType, IndexHighestCardExcludingBoardOfFlushCard),FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1923 string sqlAveragePlayerMadeHandSDTurn = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandSDTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(TurnGameStateID, BoardType),FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1924 string sqlValueHands = "CREATE TABLE IF NOT EXISTS AveragePlayerValueHandsTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,HandStrength REAL NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(TurnGameStateID, BoardType, HandStrength),FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1925
1926 if (FFConnection.State == System.Data.ConnectionState.Closed)
1927 FFConnection.Open();
1928
1929 try
1930 {
1931 using (SQLiteCommand command = new SQLiteCommand(sqlBluffs, FFConnection))
1932 command.ExecuteNonQuery();
1933
1934 using (SQLiteCommand command = new SQLiteCommand(sqlBluffWithLotsOfEquity, FFConnection))
1935 command.ExecuteNonQuery();
1936
1937 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandSDAndFDTurn, FFConnection))
1938 command.ExecuteNonQuery();
1939
1940 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandFDTurn, FFConnection))
1941 command.ExecuteNonQuery();
1942
1943 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandSDTurn, FFConnection))
1944 command.ExecuteNonQuery();
1945
1946 using (SQLiteCommand command = new SQLiteCommand(sqlValueHands, FFConnection))
1947 command.ExecuteNonQuery();
1948 }
1949 finally
1950 {
1951 FFConnection.Close();
1952 }
1953
1954 #region Create debug database
1955 using (SQLiteConnection sqlConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo"))
1956 {
1957 sqlBluffs = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,SD INTEGER(1) NOT NULL,FD INTEGER(1) NOT NULL,IndexHighestCardExcludingBoard INTEGER(1) NOT NULL,HandMask INTEGER,BoardMask INTEGER,HandDescription TEXT,BoardDescription TEXT,HandHistory TEXT,FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1958 sqlBluffWithLotsOfEquity = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsWithALotsOfEquityTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,NbOuts INTEGER(1) NOT NULL,HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1959 sqlAveragePlayerMadeHandSDAndFDTurn = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandSDAndFDTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1960 sqlAveragePlayerMadeHandFDTurn = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandFDTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,IndexHighestCardExcludingBoardOfFlushCard INTEGER(1),HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1961 sqlAveragePlayerMadeHandSDTurn = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandSDTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1962 sqlValueHands = "CREATE TABLE IF NOT EXISTS AveragePlayerValueHandsTurn (TurnGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,HandStrength REAL NOT NULL,HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));";
1963
1964 if (sqlConnection.State == System.Data.ConnectionState.Closed)
1965 sqlConnection.Open();
1966
1967 try
1968 {
1969 using (SQLiteCommand command = new SQLiteCommand(sqlBluffs, sqlConnection))
1970 command.ExecuteNonQuery();
1971
1972 using (SQLiteCommand command = new SQLiteCommand(sqlBluffWithLotsOfEquity, sqlConnection))
1973 command.ExecuteNonQuery();
1974
1975 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandSDAndFDTurn, sqlConnection))
1976 command.ExecuteNonQuery();
1977
1978 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandFDTurn, sqlConnection))
1979 command.ExecuteNonQuery();
1980
1981 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandSDTurn, sqlConnection))
1982 command.ExecuteNonQuery();
1983
1984 using (SQLiteCommand command = new SQLiteCommand(sqlValueHands, sqlConnection))
1985 command.ExecuteNonQuery();
1986 }
1987 finally
1988 {
1989 sqlConnection.Close();
1990 }
1991 }
1992 #endregion
1993 }
1994 #endregion
1995 #region River
1996 private static void CreateRiverAllGameStatesTableIfNotExist(List<CTurnGameState> _lstTurnGameState, bool _createOnDebugDatabase)
1997 {
1998 void InitializeDefaultData()
1999 {
2000 void InsertRiverGameState(CRiverGameState _riverGameState)
2001 {
2002 if (FFConnection.State == System.Data.ConnectionState.Closed)
2003 FFConnection.Open();
2004
2005 string sqlLocal = "INSERT INTO RiverAllGameStates (TurnGameStateID, TypeAction, TypeBet) values (?, ?, ?);";
2006 using (SQLiteCommand command = new SQLiteCommand(sqlLocal, FFConnection))
2007 {
2008 command.Parameters.Add(new SQLiteParameter("TurnGameStateID", _riverGameState.PTurnGameStateID.PID));
2009 command.Parameters.Add(new SQLiteParameter("TypeAction", _riverGameState.PTypeAction));
2010
2011 switch (_riverGameState.PTypeAction)
2012 {
2013 case CAction.ActionsPossible.Call:
2014 case CAction.ActionsPossible.Bet:
2015 case CAction.ActionsPossible.Raise:
2016 command.Parameters.Add(new SQLiteParameter("TypeBet", _riverGameState.PTypeBet));
2017 break;
2018 case CAction.ActionsPossible.Check:
2019 case CAction.ActionsPossible.ReRaise:
2020 command.Parameters.Add(new SQLiteParameter("TypeBet", DBNull.Value));
2021 break;
2022 default:
2023 throw new NotImplementedException("The action None and the action Fold is not allowed");
2024 }
2025
2026 command.ExecuteNonQuery();
2027 }
2028 }
2029 using (SQLiteTransaction transaction = FFConnection.BeginTransaction())
2030 {
2031 foreach (CTurnGameState turnGameState in _lstTurnGameState)
2032 {
2033 TypesPot currentTypePot = turnGameState.PFlopGameStateID.PTypePot;
2034
2035 // Insert all possible game action
2036 if (currentTypePot != TypesPot.OneBet && currentTypePot != TypesPot.FiveBetEtPlus && currentTypePot != TypesPot.Limped && currentTypePot != TypesPot.RaisedLimped && currentTypePot != TypesPot.LimpedThreeBet)
2037 {
2038 foreach (ActionsPossible currentAction in Enum.GetValues(typeof(ActionsPossible)))
2039 {
2040 if (currentAction == ActionsPossible.Check || currentAction == ActionsPossible.ReRaise)
2041 {
2042 if (currentAction == ActionsPossible.ReRaise && currentTypePot == TypesPot.TwoBet)
2043 InsertRiverGameState(new CRiverGameState(1, turnGameState, currentAction, null));
2044 else if (currentAction == ActionsPossible.Check)
2045 InsertRiverGameState(new CRiverGameState(1, turnGameState, currentAction, null));
2046 }
2047 else if (currentAction == ActionsPossible.Bet || currentAction == ActionsPossible.Raise || currentAction == ActionsPossible.Call)
2048 {
2049 foreach (BetSizePossible currentBetSize in Enum.GetValues(typeof(BetSizePossible)))
2050 {
2051 bool canContinue = false;
2052 switch (currentTypePot)
2053 {
2054 case TypesPot.ThreeBet:
2055 if (currentAction == ActionsPossible.Bet || currentAction == ActionsPossible.Call)
2056 canContinue = (currentBetSize != BetSizePossible.Percent133 && currentBetSize != BetSizePossible.Percent100 && currentBetSize != BetSizePossible.Percent72 && currentBetSize != BetSizePossible.Percent33);
2057 else if (currentAction == ActionsPossible.Raise)
2058 canContinue = (currentBetSize == BetSizePossible.AllIn); // Any raise size is considered the same here
2059 break;
2060 case TypesPot.FourBet:
2061 if (currentAction == ActionsPossible.Bet || currentAction == ActionsPossible.Call)
2062 canContinue = (currentBetSize != BetSizePossible.Percent133 && currentBetSize != BetSizePossible.Percent100 && currentBetSize != BetSizePossible.Percent72 && currentBetSize != BetSizePossible.Percent50);
2063 else if (currentAction == ActionsPossible.Raise)
2064 canContinue = (currentBetSize == BetSizePossible.AllIn); // Any raise size is considered the same here
2065 break;
2066 default:
2067 canContinue = true;
2068 break;
2069 }
2070
2071 if (canContinue)
2072 InsertRiverGameState(new CRiverGameState(1, turnGameState, currentAction, currentBetSize));
2073 }
2074 }
2075 }
2076 }
2077
2078 }
2079 transaction.Commit();
2080 }
2081
2082 }
2083
2084 string sql = "CREATE TABLE IF NOT EXISTS RiverAllGameStates (ID INTEGER PRIMARY KEY ASC,TurnGameStateID INTEGER,TypeAction INTEGER NOT NULL,TypeBet INTEGER, FOREIGN KEY(TurnGameStateID) REFERENCES TurnAllGameStates(ID));SELECT count(*) FROM RiverAllGameStates;";
2085
2086 SQLiteConnection oldConnection = FFConnection;
2087
2088 if (_createOnDebugDatabase)
2089 FFConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo");
2090
2091 if (FFConnection.State == System.Data.ConnectionState.Closed)
2092 FFConnection.Open();
2093
2094 try
2095 {
2096 using (SQLiteCommand command = new SQLiteCommand(sql, FFConnection))
2097 {
2098 using (SQLiteDataReader reader = command.ExecuteReader())
2099 {
2100 if (reader.Read())
2101 {
2102 if ((long)reader[0] == 0)
2103 InitializeDefaultData();
2104 }
2105 else
2106 throw new Exception("Unable to read RiverAllGameStates table! Was the table created?");
2107 }
2108 }
2109 }
2110 finally
2111 {
2112 FFConnection.Close();
2113 FFConnection = oldConnection;
2114 }
2115 }
2116 public static void CreateAllAveragePlayerStatsRiverTableIfNotExist()
2117 {
2118 string sqlBluffs = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsRiver (RiverGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,SD INTEGER(1) NOT NULL,FD INTEGER(1) NOT NULL,IndexHighestCardExcludingBoard INTEGER(1) NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(RiverGameStateID, BoardType, SD, FD, IndexHighestCardExcludingBoard),FOREIGN KEY(RiverGameStateID) REFERENCES RiverAllGameStates(ID));";
2119 string sqlBluffWithLotsOfEquity = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsWithALotsOfEquityRiver (RiverGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,NbOuts INTEGER(1) NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(RiverGameStateID, BoardType, NbOuts),FOREIGN KEY(RiverGameStateID) REFERENCES RiverAllGameStates(ID));";
2120 string sqlAveragePlayerMadeHandBlockerRiver = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandBlockersRiver (RiverGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,BlockerRatio REAL NOT NULL CHECK(BlockerRatio > 0),HandStrengthInBlockerRange REAL NOT NULL CHECK(HandStrengthInBlockerRange >= 0),SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(RiverGameStateID, BoardType, BlockerRatio, HandStrengthInBlockerRange),FOREIGN KEY(RiverGameStateID) REFERENCES RiverAllGameStates(ID));";
2121 string sqlValueHands = "CREATE TABLE IF NOT EXISTS AveragePlayerValueHandsRiver (RiverGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,HandStrength REAL NOT NULL,SampleCount INTEGER NOT NULL CHECK(SampleCount > 0),PRIMARY KEY(RiverGameStateID, BoardType, HandStrength),FOREIGN KEY(RiverGameStateID) REFERENCES RiverAllGameStates(ID));";
2122
2123 if (FFConnection.State == System.Data.ConnectionState.Closed)
2124 FFConnection.Open();
2125
2126 try
2127 {
2128 using (SQLiteCommand command = new SQLiteCommand(sqlBluffs, FFConnection))
2129 command.ExecuteNonQuery();
2130
2131 using (SQLiteCommand command = new SQLiteCommand(sqlBluffWithLotsOfEquity, FFConnection))
2132 command.ExecuteNonQuery();
2133
2134 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandBlockerRiver, FFConnection))
2135 command.ExecuteNonQuery();
2136
2137 using (SQLiteCommand command = new SQLiteCommand(sqlValueHands, FFConnection))
2138 command.ExecuteNonQuery();
2139 }
2140 finally
2141 {
2142 FFConnection.Close();
2143 }
2144
2145 #region Create debug database
2146 using (SQLiteConnection sqlConnection = GetConnection(@"C:\\AveragePlayerDB\\PlayersInfosDebugDB.amigo"))
2147 {
2148 sqlBluffs = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsRiver (RiverGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,SD INTEGER(1) NOT NULL,FD INTEGER(1) NOT NULL,IndexHighestCardExcludingBoard INTEGER(1) NOT NULL,HandMask INTEGER,BoardMask INTEGER,HandDescription TEXT,BoardDescription TEXT,HandHistory TEXT,FOREIGN KEY(RiverGameStateID) REFERENCES RiverAllGameStates(ID));";
2149 sqlBluffWithLotsOfEquity = "CREATE TABLE IF NOT EXISTS AveragePlayerBluffsWithALotsOfEquityRiver (RiverGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,NbOuts INTEGER(1) NOT NULL,HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(RiverGameStateID) REFERENCES RiverAllGameStates(ID));";
2150 sqlAveragePlayerMadeHandBlockerRiver = "CREATE TABLE IF NOT EXISTS AveragePlayerMadeHandBlockersRiver (RiverGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,BlockerRatio REAL NOT NULL CHECK(BlockerRatio > 0),HandStrengthInBlockerRange REAL NOT NULL CHECK(HandStrengthInBlockerRange >= 0),HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(RiverGameStateID) REFERENCES RiverAllGameStates(ID));";
2151 sqlValueHands = "CREATE TABLE IF NOT EXISTS AveragePlayerValueHandsRiver (RiverGameStateID INTEGER NOT NULL,BoardType INTEGER(2) NOT NULL,BoardHeat REAL NOT NULL,HandStrength REAL NOT NULL,HandMask INTEGER NOT NULL,BoardMask INTEGER NOT NULL,HandDescription TEXT NOT NULL,BoardDescription NOT NULL,HandHistory TEXT NOT NULL,FOREIGN KEY(RiverGameStateID) REFERENCES RiverAllGameStates(ID));";
2152
2153 if (sqlConnection.State == System.Data.ConnectionState.Closed)
2154 sqlConnection.Open();
2155
2156 try
2157 {
2158 using (SQLiteCommand command = new SQLiteCommand(sqlBluffs, sqlConnection))
2159 command.ExecuteNonQuery();
2160
2161 using (SQLiteCommand command = new SQLiteCommand(sqlBluffWithLotsOfEquity, sqlConnection))
2162 command.ExecuteNonQuery();
2163
2164 using (SQLiteCommand command = new SQLiteCommand(sqlAveragePlayerMadeHandBlockerRiver, sqlConnection))
2165 command.ExecuteNonQuery();
2166
2167 using (SQLiteCommand command = new SQLiteCommand(sqlValueHands, sqlConnection))
2168 command.ExecuteNonQuery();
2169 }
2170 finally
2171 {
2172 sqlConnection.Close();
2173 }
2174 }
2175 #endregion
2176 }
2177 #endregion
2178 #endregion
2179 }
2180}