Browse Source

* Implemented AS for table aliases

git-svn-id: trunk@19631 -
michael 13 years ago
parent
commit
672d7f6b63
2 changed files with 16 additions and 1 deletions
  1. 6 1
      packages/fcl-db/src/sql/fpsqlparser.pas
  2. 10 0
      packages/fcl-db/tests/tcparser.pas

+ 6 - 1
packages/fcl-db/src/sql/fpsqlparser.pas

@@ -323,8 +323,13 @@ begin
        T.Params:=ParseValueList(AParent,[eoParamValue]);
        T.Params:=ParseValueList(AParent,[eoParamValue]);
        GetNextToken;
        GetNextToken;
        end;
        end;
-     if (CurrentToken=tsqlIdentifier) then
+     if (CurrentToken in [tsqlIdentifier,tsqlAs]) then
        begin
        begin
+       if CurrentToken=tsqlAs then
+         begin
+         GetNextToken;
+         Expect(tsqlIdentifier);
+         end;
        T.AliasName:=CreateIdentifier(T,CurrentTokenString);
        T.AliasName:=CreateIdentifier(T,CurrentTokenString);
        GetNextToken;
        GetNextToken;
        end;
        end;

+ 10 - 0
packages/fcl-db/tests/tcparser.pas

@@ -377,6 +377,7 @@ type
     procedure TestSelectAsteriskOneTable;
     procedure TestSelectAsteriskOneTable;
     procedure TestSelectDistinctAsteriskOneTable;
     procedure TestSelectDistinctAsteriskOneTable;
     procedure TestSelectOneFieldOneTableAlias;
     procedure TestSelectOneFieldOneTableAlias;
+    procedure TestSelectOneFieldOneTableAsAlias;
     procedure TestSelectTwoFieldsTwoTables;
     procedure TestSelectTwoFieldsTwoTables;
     procedure TestSelectTwoFieldsTwoTablesJoin;
     procedure TestSelectTwoFieldsTwoTablesJoin;
     procedure TestSelectTwoFieldsTwoInnerTablesJoin;
     procedure TestSelectTwoFieldsTwoInnerTablesJoin;
@@ -3680,6 +3681,15 @@ begin
   AssertTable(Select.Tables[0],'A');
   AssertTable(Select.Tables[0],'A');
 end;
 end;
 
 
+procedure TTestSelectParser.TestSelectOneFieldOneTableAsAlias;
+begin
+  TestSelect('SELECT C.B FROM A AS C');
+  AssertEquals('One field',1,Select.Fields.Count);
+  AssertField(Select.Fields[0],'C.B');
+  AssertEquals('One table',1,Select.Tables.Count);
+  AssertTable(Select.Tables[0],'A');
+end;
+
 procedure TTestSelectParser.TestSelectTwoFieldsTwoTables;
 procedure TTestSelectParser.TestSelectTwoFieldsTwoTables;
 begin
 begin
   TestSelect('SELECT B,C FROM A,D');
   TestSelect('SELECT B,C FROM A,D');