Aceita qualquer texto. A entrada não é validada em relação a nenhum formato — qualquer string é um valor válido.
Um token que comece com uma aspa simples é tratado como um
string entre aspas. As aspas que o rodeiam são removidas antes
de o valor ser armazenado em Values[]. Uma aspa simples
literal dentro de um string entre aspas é representada
duplicando-a.
Entrada: 'O''Brien' → Values[0]: O'Brien
SQLValues[0]: 'O''Brien'
Os tokens sem aspas são armazenados tal como estão. Os espaços em
branco à esquerda e à direita são preservados, a menos que
opTrim esteja definido.
Tanto , como ; são aceites como separadores
de lista. Uma vírgula dentro de uma região entre aspas não é tratada
como um separador.
Entrada: 'smith, jones' → otSingleValue (a vírgula está dentro das aspas)
Entrada: smith, jones → otList (a vírgula está fora das aspas)
Entrada: smith; jones → otList
O separador de intervalo (por predefinição ~) divide a
entrada em dois limites. Os valores entre aspas de ambos os lados do
separador deixam de estar entre aspas após a divisão.
Entrada: alpha~omega → otRange, Valores: ['alpha', 'omega']
Entrada: 'alpha'~'omega' → otRange, Valores: ['alpha', 'omega']
Não é aplicada qualquer verificação de ordem aos intervalos
string. O erro ERR_INVALID_RANGE nunca é gerado
para itString.
Cada token é colocado entre aspas simples. As aspas simples internas
são duplicadas (convenção QuotedStr).
Valores[0]: O'Brien → SQLValores[0]: 'O''Brien'
Quando SqlOperator é sopContainsAny ou
sopContainsAll e a entrada produz uma lista, os tokens
individuais são agrupados num único argumento, em vez de gerarem
IN (…). No ElevateDB, o argumento agrupado é passado para o
predicado nativo CONTAINS ANY / CONTAINS ALL.
Em todos os outros dialetos, as palavras são unidas com %
num padrão LIKE. Os tokens vazios (incluindo os
strings '' entre aspas e os tokens que foram
resolvidos como NULL através de
opEmptyStringNull) são excluídos do
argumento agrupado. A sua inclusão introduziria espaços duplos no
argumento do ElevateDB ou %% no padrão LIKE, o
que não faz sentido em nenhum dos casos.
Entrada: "hello;;world" + sopContainsAny, sqlElevateDB
Expressão SQL: CONTAINS ANY 'hello world' (token do meio vazio excluído)
Entrada: "hello;;world" + sopContainsAny, sqlMySQL
Expressão SQL: LIKE '%hello%world%' ESCAPE '\'
Entrada: "hello;;world" + sopContainsAny, sqlBDEParadox
Expressão SQL: LIKE '%hello%world%' (sem cláusula ESCAPE)
ESCAPE '\' é acrescentado para todos os dialetos, exceto
sqlBDEParadox. A camada SQL do BDE não oferece um suporte
fiável à cláusula ESCAPE, pelo que esta é omitida nesse
dialeto. Os caracteres %, _ e \
continuam a ser substituídos no padrão para evitar correspondências
acidentais com caracteres curinga, mas sem a cláusula
ESCAPE, um \ literal na entrada do utilizador
não pode ser representado com exatidão. SQLValues[]
continua a refletir o resultado real da análise do token para cada
posição (ou seja, o token do meio aparece como '' ou
NULL em SQLValues[]); apenas a estrutura
SQLExpression ignora tokens vazios.
opTrim remove os espaços em branco à esquerda e à
direita de cada valor de token. Para itString, esta é a
única forma de remover os espaços circundantes; sem ela, estes são
preservados como parte do valor.
opEmptyStringNull converte tokens vazios (incluindo os
vazios entre aspas strings '') em
NULL no SQL, em vez de ''.
opUpperCase e opLowerCase convertem os
valores dos tokens para maiúsculas ou minúsculas.
Tanto Values[] como o conteúdo dentro de
SQLValues[] são atualizados. As palavras-chave SQL
(BETWEEN, IN, NULL, etc.) não são
afetadas. Se ambas as opções estiverem ativadas,
opUpperCase tem prioridade.
opRequired e opNotNull comportam-se
conforme descrito em Opções de
análise.