A database query compiler and compilation method has special facilities for
compiling a query that includes an Offset sequence function,
Offset(argument, index). During execution of the query, while the cursor
for a table is pointing to a current row, the Offset function is used to
access information from a previously accessed row. The argument of the
Offset sequence function is a specified function of information associated
with the previously accessed row of the table. The previously accessed row
has a position that is index rows before the current row referenced by the
cursor for the table. During compilation, the argument of the Offset
sequence function is parsed to determine a set of auxiliary fields for
each row of the table. Each auxiliary field of a row contains information
that may be accessed during execution of the Offset sequence function
while the cursor for that table is pointing to a subsequent row. The
Offset sequence function is converted into a compiled set of instructions,
including instructions for storing and reading the auxiliary fields to and
from a buffer that is separate from the table. The buffer is preferably
stored in volatile, main memory. As a result, the Offset sequence function
is executed, and information from a previous row is accessed, without
having to change the cursor position for the table.
Um método do compilador e da compilação da pergunta da base de dados tem facilidades especiais para compilar uma pergunta que inclua uma função offset da seqüência, Offset(argument, índice). Durante a execução da pergunta, quando o cursor para uma tabela apontar a uma fileira atual, a função offset é usada alcançar a informação de uma fileira previamente alcançada. O argumento da função offset da seqüência é uma função especificada da informação associada com a fileira previamente alcançada da tabela. A fileira previamente alcançada tem uma posição que seja fileiras do índice antes da fileira atual referenced pelo cursor para a tabela. Durante a compilação, o argumento da função offset da seqüência é analisado gramaticalmente para determinar um jogo de campos auxiliares para cada fileira da tabela. Cada campo auxiliar de uma fileira contem a informação que pode ser alcançada durante a execução da função offset da seqüência quando o cursor para essa tabela apontar a uma fileira subseqüente. A função offset da seqüência é convertida em um jogo compilado das instruções, including instruções para armazenar e ler os campos auxiliares a e de um amortecedor que seja separado da tabela. O amortecedor é armazenado preferivelmente na memória temporária, principal. Em conseqüência, a função offset da seqüência é executada, e a informação de uma fileira precedente é alcançada, sem ter que mudar a posição do cursor para a tabela.