mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-02 06:22:39 +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,
|
soNoDoubleDelimIsChar,
|
||||||
soDoubleQuoteStringLiteral, // Default: single quote is string literal
|
soDoubleQuoteStringLiteral, // Default: single quote is string literal
|
||||||
soSingleQuoteIdentifier, // Default: double quote is identifier. Ignored if soDoubleQuoteStringLiteral is not specified
|
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;
|
TSQLScannerOptions = Set of TSQLScannerOption;
|
||||||
|
|
||||||
@ -513,6 +514,8 @@ Var
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
Delim:=TokenStr[0];
|
Delim:=TokenStr[0];
|
||||||
|
if Delim='[' then
|
||||||
|
Delim:=']';
|
||||||
Inc(TokenStr);
|
Inc(TokenStr);
|
||||||
TokenStart := TokenStr;
|
TokenStart := TokenStr;
|
||||||
OLen := 0;
|
OLen := 0;
|
||||||
@ -792,8 +795,16 @@ begin
|
|||||||
end;
|
end;
|
||||||
'[':
|
'[':
|
||||||
begin
|
begin
|
||||||
Inc(TokenStr);
|
If (soSquareBracketsIdentifier in options) then
|
||||||
Result := tsqlSquareBraceOpen;
|
begin
|
||||||
|
Result:=DoStringLiteral;
|
||||||
|
Result:=tsqlIdentifier;
|
||||||
|
end
|
||||||
|
Else
|
||||||
|
begin
|
||||||
|
Inc(TokenStr);
|
||||||
|
Result := tsqlSquareBraceOpen;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
']':
|
']':
|
||||||
begin
|
begin
|
||||||
|
@ -235,6 +235,7 @@ type
|
|||||||
procedure TestIdentifier3;
|
procedure TestIdentifier3;
|
||||||
procedure TestIdentifier4;
|
procedure TestIdentifier4;
|
||||||
procedure TestIdentifier5;
|
procedure TestIdentifier5;
|
||||||
|
procedure TestIdentifier6;
|
||||||
procedure TestIdentifierDotIdentifier;
|
procedure TestIdentifierDotIdentifier;
|
||||||
procedure TestEOLN;
|
procedure TestEOLN;
|
||||||
procedure TestEOLN2;
|
procedure TestEOLN2;
|
||||||
@ -1382,7 +1383,7 @@ begin
|
|||||||
CheckToken(tsqlSequence,'sequence');
|
CheckToken(tsqlSequence,'sequence');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestSQLScanner.CheckTokens(ASource : String; ATokens : Array of TSQLToken);
|
procedure TTestSQLScanner.CheckTokens(ASource: String; ATokens: array of TSQLToken);
|
||||||
|
|
||||||
Var
|
Var
|
||||||
I : Integer;
|
I : Integer;
|
||||||
@ -1440,6 +1441,13 @@ begin
|
|||||||
CheckToken(tsqlSymbolString,'$0');
|
CheckToken(tsqlSymbolString,'$0');
|
||||||
end;
|
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;
|
procedure TTestSQLScanner.TestIdentifierDotIdentifier;
|
||||||
begin
|
begin
|
||||||
CheckTokens('something.different',[tsqlIdentifier,tsqldot,tsqlIdentifier]);
|
CheckTokens('something.different',[tsqlIdentifier,tsqldot,tsqlIdentifier]);
|
||||||
|
Loading…
Reference in New Issue
Block a user