Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Boards and Streets

PQL simulates complete runouts, so it always has a notion of the current street based on how many cards board= provides.

Streets

StreetBoard sizeSampled per trial
preflop0flop + turn + river
flop3turn + river
turn4river
river5nothing — fully deterministic

Street identifiers (preflop, flop, turn, river) are case-insensitive bare keywords — not strings. They appear as arguments to many functions.

Referencing Streets in Functions

Most board-aware functions take a street so you can ask about the board as it will look on a future card:

select avg(boardSuitCount(river))
from   game='holdem', hero='As9s', villain='*', board='2s3sJh'

river here means the completed five-card board, even though the simulation starts on the flop.

Fixed Boards

If board is a full five-card string the runner samples no community cards — the query becomes a deterministic evaluation, useful for checking concrete spots:

select equity(hero)
from   game='holdem', hero='AhKh', villain='QcQd', board='Qs9h2c7d3d'

Board Patterns

A partial board pattern (with suit variables or *) randomises the unspecified parts:

board='Aw9x2y'    -- any rainbow A-9-2 flop

See Range Notation for the full pattern syntax.

Dead Cards

Any card mentioned in a player range, in the board, or in dead='…' is removed from the deck for the rest of the deal. This prevents impossible combinations from being generated.

Game-Specific Notes

  • Hold’em / Short Deck: 5-card community board, all from the same deck the players draw from.
  • Omaha: same 5-card community board; players must use exactly two of their four hole cards.
  • Short Deck: 36-card deck, so fewer possible boards and faster enumeration on river-locked queries.