final class SqlParameterProfile

How one dialect writes a placeholder for a value the driver will bind.

A placeholder is written either by position or by name, and a dialect decides what spells each, what may join a name that is spelled in parts, what a name may carry after it, and what a prefix is not a placeholder after, because the same character often spells an operator as well.

Methods§

public function __construct(
    list<string> $positionalParameterPatterns,
    array<string, list<string>> $namedParameterSeparators,
    array<string, string> $namedParameterSuffixPatterns,
    array<string, list<string>> $namedParameterForbiddenPredecessors,
    private LexicalPattern $patterns = new \ZtdQuery\Sql\LexicalPattern(),
    LexicalDelimiters $delimiters = new \ZtdQuery\Sql\LexicalDelimiters(),
)

Parameters

$positionalParameterPatternslist<string>Patterns a positional parameter is written as
$namedParameterSeparatorsarray<string, list<string>>Parameter prefix => what may separate it from its name
$namedParameterSuffixPatternsarray<string, string>Parameter prefix => pattern for what may follow its name
$namedParameterForbiddenPredecessorsarray<string, list<string>>Parameter prefix => what it is not a parameter after
$patternsLexicalPatternReads a regular expression against a position
$delimitersLexicalDelimitersRefuses lexical data a scanner could not use

Throws

InvalidDefinitionException When a delimiter is empty or a pattern is unreadable
Test cases 5
Calls 5
public function positionalParameterLengthAt(string $sql, int $offset): int

Answers how long the positional parameter starting here is.

Parameters

$sqlstringStatement being scanned
$offsetintPosition to look at

Returns

int Its length, or zero when none starts there
Test cases 1
Called from 1
Calls 2
public function namedParameterPrefixAt(string $sql, int $offset): string|null

Answers the prefix of the named parameter starting here, if any.

A prefix is not always a parameter: some dialects write the same character as part of an operator, and what comes before it is what tells them apart.

Parameters

$sqlstringStatement being scanned
$offsetintPosition to look at

Returns

string|null The prefix, or null when no parameter starts there
Test cases 2
Called from 1
Calls 3
public function parameterNameSeparatorAt(string $prefix, string $sql, int $offset): string|null

Answers what separates a parameter prefix from its name here, if anything.

Parameters

$prefixstringPrefix the parameter was written with
$sqlstringStatement being scanned
$offsetintPosition to look at

Returns

string|null The separator, or null when none is written there
Test cases 1
Called from 1
Calls 2
public function parameterSuffixLength(string $prefix, string $sql, int $offset): int

Answers how much a parameter written with this prefix carries after its name.

Parameters

$prefixstringPrefix the parameter was written with
$sqlstringStatement being scanned
$offsetintPosition to look at

Returns

int How long it is, or zero when nothing follows
Test cases 1
Called from 1
Calls 2

Private surface 5§

Implementation details, listed for orientation only.

private list<non-empty-string> $positionalParameterPatterns
private array<non-empty-string, list<non-empty-string>> $namedParameterSeparators
private array<non-empty-string, non-empty-string> $namedParameterSuffixPatterns
private array<non-empty-string, list<non-empty-string>> $namedParameterForbiddenPredecessors
private LexicalPattern $patterns = new \ZtdQuery\Sql\LexicalPattern()

Test cases 16§

Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.

Dedicated tests 5
Other tests reaching this symbol 11

Relations§

Instantiated in 1
Method calls 4
Type declarations 1