sql parser: support []-identifiers

git-svn-id: trunk@46424 -
(cherry picked from commit 0ca6707e95)
This commit is contained in:
ondrej 2020-08-14 10:32:37 +00:00 committed by marcoonthegit
parent 431ac990a1
commit ffe7475cb4
2 changed files with 23 additions and 4 deletions

View File

@ -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

View File

@ -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]);