mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-24 09:39:11 +02:00
sql parser: support []-identifiers
git-svn-id: trunk@46424 -
(cherry picked from commit 0ca6707e95
)
This commit is contained in:
parent
431ac990a1
commit
ffe7475cb4
@ -161,7 +161,8 @@ Type
|
||||
soNoDoubleDelimIsChar,
|
||||
soDoubleQuoteStringLiteral, // Default: single quote is string literal
|
||||
soSingleQuoteIdentifier, // Default: double quote is identifier. Ignored if soDoubleQuoteStringLiteral is not specified
|
||||
soBackQuoteIdentifier // Default: double quote is identifier
|
||||
soBackQuoteIdentifier, // Default: double quote is identifier
|
||||
soSquareBracketsIdentifier // Default: square brackets are not supported. (Enable for MSSQL support.)
|
||||
);
|
||||
TSQLScannerOptions = Set of TSQLScannerOption;
|
||||
|
||||
@ -513,6 +514,8 @@ Var
|
||||
|
||||
begin
|
||||
Delim:=TokenStr[0];
|
||||
if Delim='[' then
|
||||
Delim:=']';
|
||||
Inc(TokenStr);
|
||||
TokenStart := TokenStr;
|
||||
OLen := 0;
|
||||
@ -792,8 +795,16 @@ begin
|
||||
end;
|
||||
'[':
|
||||
begin
|
||||
Inc(TokenStr);
|
||||
Result := tsqlSquareBraceOpen;
|
||||
If (soSquareBracketsIdentifier in options) then
|
||||
begin
|
||||
Result:=DoStringLiteral;
|
||||
Result:=tsqlIdentifier;
|
||||
end
|
||||
Else
|
||||
begin
|
||||
Inc(TokenStr);
|
||||
Result := tsqlSquareBraceOpen;
|
||||
end;
|
||||
end;
|
||||
']':
|
||||
begin
|
||||
|
@ -235,6 +235,7 @@ type
|
||||
procedure TestIdentifier3;
|
||||
procedure TestIdentifier4;
|
||||
procedure TestIdentifier5;
|
||||
procedure TestIdentifier6;
|
||||
procedure TestIdentifierDotIdentifier;
|
||||
procedure TestEOLN;
|
||||
procedure TestEOLN2;
|
||||
@ -1382,7 +1383,7 @@ begin
|
||||
CheckToken(tsqlSequence,'sequence');
|
||||
end;
|
||||
|
||||
procedure TTestSQLScanner.CheckTokens(ASource : String; ATokens : Array of TSQLToken);
|
||||
procedure TTestSQLScanner.CheckTokens(ASource: String; ATokens: array of TSQLToken);
|
||||
|
||||
Var
|
||||
I : Integer;
|
||||
@ -1440,6 +1441,13 @@ begin
|
||||
CheckToken(tsqlSymbolString,'$0');
|
||||
end;
|
||||
|
||||
procedure TTestSQLScanner.TestIdentifier6;
|
||||
begin
|
||||
CreateScanner('[A]',[soSquareBracketsIdentifier]);
|
||||
AssertEquals('Identifier is returned',tsqlIdentifier,FScanner.FetchToken);
|
||||
AssertEquals('Correct identifier','A',FScanner.CurTokenString);
|
||||
end;
|
||||
|
||||
procedure TTestSQLScanner.TestIdentifierDotIdentifier;
|
||||
begin
|
||||
CheckTokens('something.different',[tsqlIdentifier,tsqldot,tsqlIdentifier]);
|
||||
|
Loading…
Reference in New Issue
Block a user