* fcl-db: sql parser tests:

- cosmetic changes (capitalization, comments)
- add tests for SET TERM, symbol literal parsing introduced in r27907
- Lazarus test project: default+debug build mode: no optimalization, more checks enabled

git-svn-id: trunk@27908 -
This commit is contained in:
reiniero 2014-06-09 08:01:20 +00:00
parent 75169f7a2b
commit 1e21d66b89
4 changed files with 313 additions and 216 deletions

View File

@ -25,9 +25,9 @@ type
{ TTestParser }
TTestParser = Class(TSQLparser)
TTestParser = Class(TSQLParser)
public
Procedure ParseStringDef(Out DT : TSQLDataType; Out Len : Integer; Out ACharset : TSQLStringtype);
procedure ParseStringDef(Out DT : TSQLDataType; Out Len : Integer; Out ACharset : TSQLStringtype);
Function ParseType(Flags : TParseTypeFlags) : TSQLTypeDefinition;
Function ParseConstraint : TSQLExpression;
Function ParseProcedureStatements : TSQLStatement;
@ -39,17 +39,17 @@ type
Private
FSource : TStringStream;
FParser : TTestParser;
FToFree: TSQLElement;
FToFree : TSQLElement; //will be freed by test teardown
FErrSource : string;
protected
procedure AssertTypeDefaults(TD: TSQLTypeDefinition; Len: Integer=0);
Procedure TestStringDef(ASource: String; ExpectDT: TSQLDataType; ExpectLen: Integer; ExpectCharset : TSQLStringType='');
Function TestType(ASource : string; AFlags : TParseTypeFlags; AExpectedType : TSQLDataType) : TSQLTypeDefinition;
Function TestCheck(ASource : string; AExpectedConstraint : TSQLElementClass) : TSQLExpression;
Procedure CreateParser(Const ASource : string);
Function CheckClass(E : TSQLElement; C : TSQLElementClass) : TSQLElement;
procedure TestStringDef(ASource: String; ExpectDT: TSQLDataType; ExpectLen: Integer; ExpectCharset : TSQLStringType='');
function TestType(ASource : string; AFlags : TParseTypeFlags; AExpectedType : TSQLDataType) : TSQLTypeDefinition;
function TestCheck(ASource : string; AExpectedConstraint : TSQLElementClass) : TSQLExpression;
procedure CreateParser(Const ASource : string);
function CheckClass(E : TSQLElement; C : TSQLElementClass) : TSQLElement;
procedure TestDropStatement(Const ASource : string;C : TSQLElementClass);
Function TestCreateStatement(Const ASource,AName : string;C: TSQLElementClass) : TSQLCreateOrAlterStatement;
function TestCreateStatement(Const ASource,AName : string;C: TSQLElementClass) : TSQLCreateOrAlterStatement;
procedure AssertEquals(const AMessage: String; Expected, Actual: TSQLToken); overload;
procedure AssertEquals(const AMessage: String; Expected, Actual: TSQLBinaryoperation); overload;
procedure AssertEquals(const AMessage: String; Expected, Actual: TSQLUnaryoperation); overload;
@ -65,23 +65,23 @@ type
procedure AssertEquals(const AMessage: String; Expected, Actual: TTriggerState); overload;
procedure AssertEquals(const AMessage: String; Expected, Actual: TTriggerOperations); overload;
function AssertLiteralExpr(Const AMessage : String; Element : TSQLExpression; ALiteralClass : TSQLElementClass) : TSQLLiteral;
Procedure AssertIdentifierName(Const AMessage : String; Const AExpected : String; Element : TSQLElement);
Procedure AssertField(AField : TSQLElement; Const AName : String; Const AAlias : String = '');
Procedure AssertAggregate(AField : TSQLElement; AAgregate : TSQLAggregateFunction; Const AFieldName : String; AOption : TSQLAggregateOption; Const AAlias : String = '');
Procedure AssertAggregateExpression(E : TSQLElement; AAgregate : TSQLAggregateFunction; Const AFieldName : String; AOption : TSQLAggregateOption);
Procedure AssertTable(ATable : TSQLElement; Const AName : String; Const AAlias : String = '');
Function AssertJoin(AJoin : TSQLElement; Const AFirst,ASecond : String; Const aJoinType : TSQLJoinType) : TSQLJoinTableReference;
Function AssertJoinOn(AJoin : TSQLExpression; Const AFirst,ASecond : String; Const AOperation : TSQLBinaryOperation) : TSQLBinaryExpression;
Function AssertOrderBy(AOrderBy : TSQLElement; Const AField : String; Const ANumber : Integer; Const AOrdering : TSQLOrderDirection) : TSQLOrderByElement;
Function AssertSecondaryFile(ASecondaryFile : TSQLElement; Const AFile : String; Const ALength,AStart : Integer) : TSQLDatabaseFileInfo;
procedure AssertIdentifierName(Const AMessage : String; Const AExpected : String; Element : TSQLElement);
procedure AssertField(AField : TSQLElement; Const AName : String; Const AAlias : String = '');
procedure AssertAggregate(AField : TSQLElement; AAgregate : TSQLAggregateFunction; Const AFieldName : String; AOption : TSQLAggregateOption; Const AAlias : String = '');
procedure AssertAggregateExpression(E : TSQLElement; AAgregate : TSQLAggregateFunction; Const AFieldName : String; AOption : TSQLAggregateOption);
procedure AssertTable(ATable : TSQLElement; Const AName : String; Const AAlias : String = '');
function AssertJoin(AJoin : TSQLElement; Const AFirst,ASecond : String; Const aJoinType : TSQLJoinType) : TSQLJoinTableReference;
function AssertJoinOn(AJoin : TSQLExpression; Const AFirst,ASecond : String; Const AOperation : TSQLBinaryOperation) : TSQLBinaryExpression;
function AssertOrderBy(AOrderBy : TSQLElement; Const AField : String; Const ANumber : Integer; Const AOrdering : TSQLOrderDirection) : TSQLOrderByElement;
function AssertSecondaryFile(ASecondaryFile : TSQLElement; Const AFile : String; Const ALength,AStart : Integer) : TSQLDatabaseFileInfo;
procedure TestTypeError;
Procedure TestStringError;
Procedure TestCheckError;
Procedure TestParseError;
procedure TestStringError;
procedure TestCheckError;
procedure TestParseError;
procedure SetUp; override;
procedure TearDown; override;
Property Parser : TTestParser Read FParser;
Property ToFree : TSQLElement Read FToFree Write FTofree;
property Parser : TTestParser Read FParser;
property ToFree : TSQLElement Read FToFree Write FTofree;
end;
{ TTestDropParser }
@ -106,16 +106,16 @@ type
TTestGeneratorParser = Class(TTestSQLParser)
Published
Procedure TestCreateGenerator;
Procedure TestSetGenerator;
procedure TestCreateGenerator;
procedure TestSetGenerator;
end;
{ TTestRoleParser }
TTestRoleParser = Class(TTestSQLParser)
Published
Procedure TestCreateRole;
Procedure TestAlterRole;
procedure TestCreateRole;
procedure TestAlterRole;
end;
{ TTestTypeParser }
@ -123,7 +123,7 @@ type
TTestTypeParser = Class(TTestSQLParser)
private
Published
Procedure TestStringType1;
procedure TestStringType1;
procedure TestStringType2;
procedure TestStringType3;
procedure TestStringType4;
@ -137,12 +137,12 @@ type
procedure TestStringType12;
procedure TestStringType13;
procedure TestStringType14;
Procedure TestStringType15;
procedure TestStringType15;
procedure TestStringType16;
procedure TestStringType17;
procedure TestStringType18;
procedure TestStringType19;
Procedure TestStringTypeErrors1;
procedure TestStringTypeErrors1;
procedure TestStringTypeErrors2;
procedure TestStringTypeErrors3;
procedure TestTypeInt1;
@ -190,7 +190,7 @@ type
procedure TestCheckNotNull;
procedure TestCheckBraces;
procedure TestCheckBracesError;
Procedure TestCheckParamError;
procedure TestCheckParamError;
procedure TestCheckIdentifierError;
procedure TestIsEqual;
procedure TestIsNotEqual1;
@ -211,7 +211,7 @@ type
procedure TestNotBetween;
procedure TestLikeEscape;
procedure TestNotLikeEscape;
Procedure TestAnd;
procedure TestAnd;
procedure TestOr;
procedure TestNotOr;
end;
@ -222,9 +222,9 @@ type
TTestDomainParser = Class(TTestSQLParser)
private
Published
Procedure TestSimpleDomain;
Procedure TestSimpleDomainAs;
Procedure TestNotNullDomain;
procedure TestSimpleDomain;
procedure TestSimpleDomainAs;
procedure TestNotNullDomain;
procedure TestDefaultNotNullDomain;
procedure TestCheckDomain;
procedure TestDefaultCheckNotNullDomain;
@ -245,9 +245,9 @@ type
TTestExceptionParser = Class(TTestSQLParser)
Published
Procedure TestException;
procedure TestException;
procedure TestAlterException;
Procedure TestExceptionError1;
procedure TestExceptionError1;
procedure TestExceptionError2;
end;
@ -279,7 +279,7 @@ type
private
procedure DoTestCreateReferencesField(Const ASource : String; AOnUpdate,AOnDelete : TForeignKeyAction);
Published
Procedure TestCreateOneSimpleField;
procedure TestCreateOneSimpleField;
procedure TestCreateTwoSimpleFields;
procedure TestCreateOnePrimaryField;
procedure TestCreateOneNamedPrimaryField;
@ -309,56 +309,56 @@ type
procedure TestCreateNamedUniqueConstraint;
procedure TestCreateCheckConstraint;
procedure TestCreateNamedCheckConstraint;
Procedure TestAlterDropField;
Procedure TestAlterDropFields;
Procedure TestAlterDropConstraint;
Procedure TestAlterDropConstraints;
Procedure TestAlterRenameField;
procedure TestAlterDropField;
procedure TestAlterDropFields;
procedure TestAlterDropConstraint;
procedure TestAlterDropConstraints;
procedure TestAlterRenameField;
procedure TestAlterRenameColumnField;
Procedure TestAlterFieldType;
Procedure TestAlterFieldPosition;
Procedure TestAlterAddField;
Procedure TestAlterAddFields;
Procedure TestAlterAddPrimarykey;
Procedure TestAlterAddNamedPrimarykey;
Procedure TestAlterAddCheckConstraint;
procedure TestAlterFieldType;
procedure TestAlterFieldPosition;
procedure TestAlterAddField;
procedure TestAlterAddFields;
procedure TestAlterAddPrimarykey;
procedure TestAlterAddNamedPrimarykey;
procedure TestAlterAddCheckConstraint;
procedure TestAlterAddNamedCheckConstraint;
Procedure TestAlterAddForeignkey;
Procedure TestAlterAddNamedForeignkey;
procedure TestAlterAddForeignkey;
procedure TestAlterAddNamedForeignkey;
end;
{ TTestDeleteParser }
TTestDeleteParser = Class(TTestSQLParser)
Private
Function TestDelete(Const ASource , ATable: String) : TSQLDeleteStatement;
function TestDelete(Const ASource , ATable: String) : TSQLDeleteStatement;
Published
Procedure TestSimpleDelete;
Procedure TestSimpleDeleteAlias;
Procedure TestDeleteWhereNull;
procedure TestSimpleDelete;
procedure TestSimpleDeleteAlias;
procedure TestDeleteWhereNull;
end;
{ TTestUpdateParser }
TTestUpdateParser = Class(TTestSQLParser)
Private
Function TestUpdate(Const ASource , ATable: String) : TSQLUpdateStatement;
function TestUpdate(Const ASource , ATable: String) : TSQLUpdateStatement;
Published
Procedure TestUpdateOneField;
Procedure TestUpdateOneFieldFull;
Procedure TestUpdateTwoFields;
Procedure TestUpdateOneFieldWhereIsNull;
procedure TestUpdateOneField;
procedure TestUpdateOneFieldFull;
procedure TestUpdateTwoFields;
procedure TestUpdateOneFieldWhereIsNull;
end;
{ TTestInsertParser }
TTestInsertParser = Class(TTestSQLParser)
Private
Function TestInsert(Const ASource , ATable: String) : TSQLInsertStatement;
function TestInsert(Const ASource , ATable: String) : TSQLInsertStatement;
Published
Procedure TestInsertOneField;
procedure TestInsertOneField;
procedure TestInsertTwoFields;
Procedure TestInsertOneValue;
procedure TestInsertOneValue;
procedure TestInsertTwoValues;
end;
@ -367,18 +367,18 @@ type
TTestSelectParser = Class(TTestSQLParser)
Private
FSelect : TSQLSelectStatement;
Function TestSelect(Const ASource : String) : TSQLSelectStatement;
Procedure TestSelectError(Const ASource : String);
Procedure DoExtractSimple(Expected : TSQLExtractElement);
Property Select : TSQLSelectStatement Read FSelect;
function TestSelect(Const ASource : String) : TSQLSelectStatement;
procedure TestSelectError(Const ASource : String);
procedure DoExtractSimple(Expected : TSQLExtractElement);
property Select : TSQLSelectStatement Read FSelect;
Published
Procedure TestSelectOneFieldOneTable;
Procedure TestSelectOneFieldOneTableTransaction;
Procedure TestSelectOneArrayFieldOneTable;
Procedure TestSelectTwoFieldsOneTable;
procedure TestSelectOneFieldOneTable;
procedure TestSelectOneFieldOneTableTransaction;
procedure TestSelectOneArrayFieldOneTable;
procedure TestSelectTwoFieldsOneTable;
procedure TestSelectOneFieldAliasOneTable;
procedure TestSelectTwoFieldAliasesOneTable;
Procedure TestSelectOneDistinctFieldOneTable;
procedure TestSelectOneDistinctFieldOneTable;
procedure TestSelectOneAllFieldOneTable;
procedure TestSelectAsteriskOneTable;
procedure TestSelectDistinctAsteriskOneTable;
@ -393,7 +393,7 @@ type
procedure TestSelectTwoFieldsThreeTablesJoin;
procedure TestSelectTwoFieldsBracketThreeTablesJoin;
procedure TestSelectTwoFieldsThreeBracketTablesJoin;
Procedure TestAggregateCount;
procedure TestAggregateCount;
procedure TestAggregateCountAsterisk;
procedure TestAggregateCountAll;
procedure TestAggregateCountDistinct;
@ -413,13 +413,13 @@ type
procedure TestAggregateAvgAll;
procedure TestAggregateAvgAsterisk;
procedure TestAggregateAvgDistinct;
Procedure TestUpperConst;
procedure TestUpperConst;
procedure TestUpperError;
Procedure TestGenID;
Procedure TestGenIDError1;
Procedure TestGenIDError2;
Procedure TestCastSimple;
Procedure TestExtractSimple;
procedure TestGenID;
procedure TestGenIDError1;
procedure TestGenIDError2;
procedure TestCastSimple;
procedure TestExtractSimple;
procedure TestOrderByOneField;
procedure TestOrderByTwoFields;
procedure TestOrderByThreeFields;
@ -435,10 +435,10 @@ type
procedure TestGroupByOne;
procedure TestGroupByTwo;
procedure TestHavingOne;
Procedure TestUnionSimple;
procedure TestUnionSimple;
procedure TestUnionSimpleAll;
procedure TestUnionSimpleOrderBy;
Procedure TestUnionDouble;
procedure TestUnionDouble;
procedure TestUnionError1;
procedure TestUnionError2;
procedure TestPlanOrderNatural;
@ -455,7 +455,7 @@ type
procedure TestWhereAll;
procedure TestWhereAny;
procedure TestWhereSome;
Procedure TestParam;
procedure TestParam;
procedure TestParamExpr;
end;
@ -464,18 +464,18 @@ type
TTestRollBackParser = Class(TTestSQLParser)
Private
FRollback : TSQLRollbackStatement;
Function TestRollback(Const ASource : String) : TSQLRollbackStatement;
Procedure TestRollbackError(Const ASource : String);
Property Rollback : TSQLRollbackStatement Read FRollback;
function TestRollback(Const ASource : String) : TSQLRollbackStatement;
procedure TestRollbackError(Const ASource : String);
property Rollback : TSQLRollbackStatement Read FRollback;
Published
Procedure TestRollback;
Procedure TestRollbackWork;
Procedure TestRollbackRelease;
Procedure TestRollbackWorkRelease;
Procedure TestRollbackTransaction;
Procedure TestRollbackTransactionWork;
Procedure TestRollbackTransactionRelease;
Procedure TestRollbackTransactionWorkRelease;
procedure TestRollback;
procedure TestRollbackWork;
procedure TestRollbackRelease;
procedure TestRollbackWorkRelease;
procedure TestRollbackTransaction;
procedure TestRollbackTransactionWork;
procedure TestRollbackTransactionRelease;
procedure TestRollbackTransactionWorkRelease;
end;
{ TTestCommitParser }
@ -483,26 +483,26 @@ type
TTestCommitParser = Class(TTestSQLParser)
Private
FCommit : TSQLCommitStatement;
Function TestCommit(Const ASource : String) : TSQLCommitStatement;
Procedure TestCommitError(Const ASource : String);
Property Commit : TSQLCommitStatement Read FCommit;
function TestCommit(Const ASource : String) : TSQLCommitStatement;
procedure TestCommitError(Const ASource : String);
property Commit : TSQLCommitStatement Read FCommit;
Published
Procedure TestCommit;
Procedure TestCommitWork;
Procedure TestCommitRelease;
Procedure TestCommitWorkRelease;
Procedure TestCommitTransaction;
Procedure TestCommitTransactionWork;
Procedure TestCommitTransactionRelease;
Procedure TestCommitTransactionWorkRelease;
Procedure TestCommitRetain;
Procedure TestCommitWorkRetain;
Procedure TestCommitReleaseRetain;
Procedure TestCommitWorkReleaseRetain;
Procedure TestCommitTransactionRetain;
Procedure TestCommitTransactionWorkRetain;
Procedure TestCommitTransactionReleaseRetain;
Procedure TestCommitTransactionWorkReleaseRetain;
procedure TestCommit;
procedure TestCommitWork;
procedure TestCommitRelease;
procedure TestCommitWorkRelease;
procedure TestCommitTransaction;
procedure TestCommitTransactionWork;
procedure TestCommitTransactionRelease;
procedure TestCommitTransactionWorkRelease;
procedure TestCommitRetain;
procedure TestCommitWorkRetain;
procedure TestCommitReleaseRetain;
procedure TestCommitWorkReleaseRetain;
procedure TestCommitTransactionRetain;
procedure TestCommitTransactionWorkRetain;
procedure TestCommitTransactionReleaseRetain;
procedure TestCommitTransactionWorkReleaseRetain;
procedure TestCommitRetainSnapShot;
end;
@ -511,13 +511,13 @@ type
TTestExecuteProcedureParser = Class(TTestSQLParser)
Private
FExecute : TSQLExecuteProcedureStatement;
Function TestExecute(Const ASource : String) : TSQLExecuteProcedureStatement;
Procedure TestExecuteError(Const ASource : String);
Property Execute: TSQLExecuteProcedureStatement Read FExecute;
function TestExecute(Const ASource : String) : TSQLExecuteProcedureStatement;
procedure TestExecuteError(Const ASource : String);
property Execute: TSQLExecuteProcedureStatement Read FExecute;
Published
Procedure TestExecuteSimple;
Procedure TestExecuteSimpleTransaction;
Procedure TestExecuteSimpleReturningValues;
procedure TestExecuteSimple;
procedure TestExecuteSimpleTransaction;
procedure TestExecuteSimpleReturningValues;
procedure TestExecuteSimpleReturning2Values;
procedure TestExecuteOneArg;
procedure TestExecuteOneArgNB;
@ -538,12 +538,12 @@ type
TTestConnectParser = Class(TTestSQLParser)
Private
FConnect : TSQLConnectStatement;
Function TestConnect(Const ASource : String) : TSQLConnectStatement;
Procedure TestConnectError(Const ASource : String);
Property Connect: TSQLConnectStatement Read FConnect;
function TestConnect(Const ASource : String) : TSQLConnectStatement;
procedure TestConnectError(Const ASource : String);
property Connect: TSQLConnectStatement Read FConnect;
Published
Procedure TestConnectSimple;
Procedure TestConnectUser;
procedure TestConnectSimple;
procedure TestConnectUser;
procedure TestConnectPassword;
procedure TestConnectUserPassword;
procedure TestConnectUserPasswordRole;
@ -556,11 +556,11 @@ type
TTestCreateDatabaseParser = Class(TTestSQLParser)
Private
FCreateDB : TSQLCreateDatabaseStatement;
Function TestCreate(Const ASource : String) : TSQLCreateDatabaseStatement;
Procedure TestCreateError(Const ASource : String);
Property CreateDB : TSQLCreateDatabaseStatement Read FCreateDB;
function TestCreate(Const ASource : String) : TSQLCreateDatabaseStatement;
procedure TestCreateError(Const ASource : String);
property CreateDB : TSQLCreateDatabaseStatement Read FCreateDB;
published
Procedure TestSimple;
procedure TestSimple;
procedure TestSimpleSchema;
procedure TestSimpleUSer;
procedure TestSimpleUSerPassword;
@ -593,11 +593,11 @@ type
TTestAlterDatabaseParser = Class(TTestSQLParser)
Private
FAlterDB : TSQLAlterDatabaseStatement;
Function TestAlter(Const ASource : String) : TSQLAlterDatabaseStatement;
Procedure TestAlterError(Const ASource : String);
Property AlterDB : TSQLAlterDatabaseStatement Read FAlterDB;
function TestAlter(Const ASource : String) : TSQLAlterDatabaseStatement;
procedure TestAlterError(Const ASource : String);
property AlterDB : TSQLAlterDatabaseStatement Read FAlterDB;
published
Procedure TestSimple;
procedure TestSimple;
procedure TestLength;
procedure TestStarting;
procedure TestStartingLength;
@ -612,11 +612,11 @@ type
TTestCreateViewParser = Class(TTestSQLParser)
Private
FView : TSQLCreateViewStatement;
Function TestCreate(Const ASource : String) : TSQLCreateViewStatement;
Procedure TestCreateError(Const ASource : String);
Property View : TSQLCreateViewStatement Read FView;
function TestCreate(Const ASource : String) : TSQLCreateViewStatement;
procedure TestCreateError(Const ASource : String);
property View : TSQLCreateViewStatement Read FView;
Published
Procedure TestSimple;
procedure TestSimple;
procedure TestFieldList;
procedure TestFieldList2;
procedure TestSimpleWithCheckoption;
@ -627,11 +627,11 @@ type
TTestCreateShadowParser = Class(TTestSQLParser)
Private
FShadow : TSQLCreateShadowStatement;
Function TestCreate(Const ASource : String) : TSQLCreateShadowStatement;
Procedure TestCreateError(Const ASource : String);
Property Shadow : TSQLCreateShadowStatement Read FShadow;
function TestCreate(Const ASource : String) : TSQLCreateShadowStatement;
procedure TestCreateError(Const ASource : String);
property Shadow : TSQLCreateShadowStatement Read FShadow;
published
Procedure TestSimple;
procedure TestSimple;
procedure TestLength;
procedure TestLength2;
procedure TestLength3;
@ -653,13 +653,13 @@ type
Private
FStatement : TSQLStatement;
procedure TestParseStatementError;
Function TestStatement(Const ASource : String) : TSQLStatement;
Procedure TestStatementError(Const ASource : String);
Property Statement : TSQLStatement Read FStatement;
function TestStatement(Const ASource : String) : TSQLStatement;
procedure TestStatementError(Const ASource : String);
property Statement : TSQLStatement Read FStatement;
Published
Procedure TestException;
Procedure TestExceptionError;
Procedure TestExit;
procedure TestException;
procedure TestExceptionError;
procedure TestExit;
procedure TestSuspend;
procedure TestEmptyBlock;
procedure TestExitBlock;
@ -713,11 +713,11 @@ type
TTestCreateProcedureParser = Class(TTestSQLParser)
Private
FStatement : TSQLCreateProcedureStatement;
Function TestCreate(Const ASource : String) : TSQLCreateProcedureStatement;
Procedure TestCreateError(Const ASource : String);
Property Statement : TSQLCreateProcedureStatement Read FStatement;
function TestCreate(Const ASource : String) : TSQLCreateProcedureStatement;
procedure TestCreateError(Const ASource : String);
property Statement : TSQLCreateProcedureStatement Read FStatement;
Published
Procedure TestEmptyProcedure;
procedure TestEmptyProcedure;
procedure TestExitProcedure;
procedure TestProcedureOneArgument;
procedure TestProcedureTwoArguments;
@ -733,13 +733,13 @@ type
TTestCreateTriggerParser = Class(TTestSQLParser)
Private
FStatement : TSQLAlterCreateTriggerStatement;
Function TestCreate(Const ASource : String) : TSQLCreateTriggerStatement;
Function TestAlter(Const ASource : String) : TSQLAlterTriggerStatement;
Procedure TestCreateError(Const ASource : String);
Property Statement : TSQLAlterCreateTriggerStatement Read FStatement;
function TestCreate(Const ASource : String) : TSQLCreateTriggerStatement;
function TestAlter(Const ASource : String) : TSQLAlterTriggerStatement;
procedure TestCreateError(Const ASource : String);
property Statement : TSQLAlterCreateTriggerStatement Read FStatement;
Published
Procedure TestEmptyTrigger;
Procedure TestExitTrigger;
procedure TestEmptyTrigger;
procedure TestExitTrigger;
procedure TestEmptyTriggerAfterUpdate;
procedure TestEmptyTriggerBeforeDelete;
procedure TestEmptyTriggerBeforeInsert;
@ -756,12 +756,12 @@ type
TTestDeclareExternalFunctionParser = Class(TTestSQLParser)
Private
FStatement : TSQLDeclareExternalFunctionStatement;
Function TestCreate(Const ASource : String) : TSQLDeclareExternalFunctionStatement;
Procedure TestCreateError(Const ASource : String);
Property Statement : TSQLDeclareExternalFunctionStatement Read FStatement;
function TestCreate(Const ASource : String) : TSQLDeclareExternalFunctionStatement;
procedure TestCreateError(Const ASource : String);
property Statement : TSQLDeclareExternalFunctionStatement Read FStatement;
Published
Procedure TestEmptyfunction;
Procedure TestEmptyfunctionByValue;
procedure TestEmptyfunction;
procedure TestEmptyfunctionByValue;
procedure TestCStringfunction;
procedure TestCStringFreeItfunction;
procedure TestOneArgumentFunction;
@ -773,71 +773,80 @@ type
TTestGrantParser = Class(TTestSQLParser)
Private
FStatement : TSQLGrantStatement;
Function TestGrant(Const ASource : String) : TSQLGrantStatement;
Procedure TestGrantError(Const ASource : String);
Property Statement : TSQLGrantStatement Read FStatement;
function TestGrant(Const ASource : String) : TSQLGrantStatement;
procedure TestGrantError(Const ASource : String);
property Statement : TSQLGrantStatement Read FStatement;
Published
Procedure TestSimple;
Procedure Test2Operations;
Procedure TestDeletePrivilege;
Procedure TestUpdatePrivilege;
Procedure TestInsertPrivilege;
Procedure TestReferencePrivilege;
Procedure TestAllPrivileges;
Procedure TestAllPrivileges2;
Procedure TestUpdateColPrivilege;
Procedure TestUpdate2ColsPrivilege;
Procedure TestReferenceColPrivilege;
Procedure TestReference2ColsPrivilege;
Procedure TestUserPrivilege;
Procedure TestUserPrivilegeWithGrant;
procedure TestSimple;
procedure Test2Operations;
procedure TestDeletePrivilege;
procedure TestUpdatePrivilege;
procedure TestInsertPrivilege;
procedure TestReferencePrivilege;
procedure TestAllPrivileges;
procedure TestAllPrivileges2;
procedure TestUpdateColPrivilege;
procedure TestUpdate2ColsPrivilege;
procedure TestReferenceColPrivilege;
procedure TestReference2ColsPrivilege;
procedure TestUserPrivilege;
procedure TestUserPrivilegeWithGrant;
procedure TestGroupPrivilege;
procedure TestProcedurePrivilege;
procedure TestViewPrivilege;
procedure TestTriggerPrivilege;
procedure TestPublicPrivilege;
Procedure TestExecuteToUser;
procedure TestExecuteToUser;
procedure TestExecuteToProcedure;
procedure TestRoleToUser;
procedure TestRoleToUserWithAdmin;
procedure TestRoleToPublic;
procedure Test2RolesToUser;
end;
{ TTestGrantParser }
{ TTestRevokeParser }
TTestRevokeParser = Class(TTestSQLParser)
Private
FStatement : TSQLRevokeStatement;
Function TestRevoke(Const ASource : String) : TSQLRevokeStatement;
Procedure TestRevokeError(Const ASource : String);
Property Statement : TSQLRevokeStatement Read FStatement;
function TestRevoke(Const ASource : String) : TSQLRevokeStatement;
procedure TestRevokeError(Const ASource : String);
property Statement : TSQLRevokeStatement Read FStatement;
Published
Procedure TestSimple;
Procedure Test2Operations;
Procedure TestDeletePrivilege;
Procedure TestUpdatePrivilege;
Procedure TestInsertPrivilege;
Procedure TestReferencePrivilege;
Procedure TestAllPrivileges;
Procedure TestAllPrivileges2;
Procedure TestUpdateColPrivilege;
Procedure TestUpdate2ColsPrivilege;
Procedure TestReferenceColPrivilege;
Procedure TestReference2ColsPrivilege;
Procedure TestUserPrivilege;
Procedure TestUserPrivilegeWithRevoke;
procedure TestSimple;
procedure Test2Operations;
procedure TestDeletePrivilege;
procedure TestUpdatePrivilege;
procedure TestInsertPrivilege;
procedure TestReferencePrivilege;
procedure TestAllPrivileges;
procedure TestAllPrivileges2;
procedure TestUpdateColPrivilege;
procedure TestUpdate2ColsPrivilege;
procedure TestReferenceColPrivilege;
procedure TestReference2ColsPrivilege;
procedure TestUserPrivilege;
procedure TestUserPrivilegeWithRevoke;
procedure TestGroupPrivilege;
procedure TestProcedurePrivilege;
procedure TestViewPrivilege;
procedure TestTriggerPrivilege;
procedure TestPublicPrivilege;
Procedure TestExecuteToUser;
procedure TestExecuteToUser;
procedure TestExecuteToProcedure;
procedure TestRoleToUser;
procedure TestRoleToPublic;
procedure Test2RolesToUser;
end;
{ TTestTermParser }
TTestTermParser = Class(TTestSQLParser)
published
procedure TestSetTerm;
procedure TestSetTermSemicolon;
end;
{ TTestGlobalParser }
TTestGlobalParser = Class(TTestSQLParser)
@ -849,6 +858,40 @@ implementation
uses typinfo;
{ TTestTermParser }
procedure TTestTermParser.TestSetTerm;
Var
S : TSQLSetTermStatement;
begin
CreateParser('SET TERM ^ ;');
FToFree:=Parser.Parse;
S:=TSQLSetTermStatement(CheckClass(FToFree,TSQLSetTermStatement));
AssertEquals('New value','^',S.NewValue);
AssertEquals('Closing semicolon',tsqlSEMICOLON,Parser.CurrentToken);
Parser.GetNextToken;
AssertEquals('End of stream reached',tsqlEOF,Parser.CurrentToken);
end;
procedure TTestTermParser.TestSetTermSemicolon;
Var
S : TSQLSetTermStatement;
begin
CreateParser('SET TERM ; ^');
FParser.SetStatementTerminator('^'); // emulate a previous SET TERM ^ ;
AssertEquals('Closing statement terminator should match ^','^',Parser.GetStatementTerminator);
FToFree:=Parser.Parse;
S:=TSQLSetTermStatement(CheckClass(FToFree,TSQLSetTermStatement));
AssertEquals('New value',';',S.NewValue);
AssertEquals('Closing terminator',tsqlStatementTerminator,Parser.CurrentToken);
AssertEquals('Closing ^','^',Parser.CurrentTokenString);
Parser.GetNextToken;
AssertEquals('End of stream reached',tsqlEOF,Parser.CurrentToken);
end;
{ TTestGlobalParser }
procedure TTestGlobalParser.TestEmpty;
@ -1225,7 +1268,7 @@ begin
FToFree:=Parser.Parse;
end;
Procedure TTestSQLParser.TestStringDef(ASource : String; ExpectDT : TSQLDataType; ExpectLen : Integer; ExpectCharset : TSQLStringType='');
procedure TTestSQLParser.TestStringDef(ASource : String; ExpectDT : TSQLDataType; ExpectLen : Integer; ExpectCharset : TSQLStringType='');
Var
Dt : TSQLDataType;
@ -6697,7 +6740,7 @@ procedure TTestCreateProcedureParser.TestEmptyProcedure;
begin
TestCreate('CREATE PROCEDURE A AS BEGIN END');
AssertIdentifierName('Correcte procedure naam','A',Statement.ObjectName);
AssertIdentifierName('Correct procedure name','A',Statement.ObjectName);
AssertEquals('No arguments',0,Statement.InputVariables.Count);
AssertEquals('No return values',0,Statement.OutputVariables.Count);
AssertEquals('No local variables',0,Statement.LocalVariables.Count);
@ -6708,7 +6751,7 @@ procedure TTestCreateProcedureParser.TestExitProcedure;
begin
TestCreate('CREATE PROCEDURE A AS BEGIN EXIT; END');
AssertIdentifierName('Correcte procedure naam','A',Statement.ObjectName);
AssertIdentifierName('Correct procedure name','A',Statement.ObjectName);
AssertEquals('No arguments',0,Statement.InputVariables.Count);
AssertEquals('No return values',0,Statement.OutputVariables.Count);
AssertEquals('No local variables',0,Statement.LocalVariables.Count);
@ -6723,7 +6766,7 @@ Var
begin
TestCreate('CREATE PROCEDURE A (P INT) AS BEGIN END');
AssertIdentifierName('Correcte procedure naam','A',Statement.ObjectName);
AssertIdentifierName('Correct procedure name','A',Statement.ObjectName);
AssertEquals('1 arguments',1,Statement.InputVariables.Count);
P:=TSQLProcedureParamDef(CheckClass(Statement.InputVariables[0],TSQLProcedureParamDef));
AssertIdentifierName('Correct parameter name','P',P.ParamName);
@ -6740,7 +6783,7 @@ Var
begin
TestCreate('CREATE PROCEDURE A (P INT,Q CHAR(4)) AS BEGIN END');
AssertIdentifierName('Correcte procedure naam','A',Statement.ObjectName);
AssertIdentifierName('Correct procedure name','A',Statement.ObjectName);
AssertEquals('Two arguments',2,Statement.InputVariables.Count);
P:=TSQLProcedureParamDef(CheckClass(Statement.InputVariables[0],TSQLProcedureParamDef));
AssertIdentifierName('Correct parameter name','P',P.ParamName);
@ -6763,7 +6806,7 @@ Var
begin
TestCreate('CREATE PROCEDURE A RETURNS (P INT) AS BEGIN END');
AssertIdentifierName('Correcte procedure naam','A',Statement.ObjectName);
AssertIdentifierName('Correct procedure name','A',Statement.ObjectName);
AssertEquals('1 return value',1,Statement.OutputVariables.Count);
P:=TSQLProcedureParamDef(CheckClass(Statement.OutputVariables[0],TSQLProcedureParamDef));
AssertIdentifierName('Correct parameter name','P',P.ParamName);
@ -6780,7 +6823,7 @@ Var
begin
TestCreate('CREATE PROCEDURE A RETURNS (P INT, Q CHAR(5)) AS BEGIN END');
AssertIdentifierName('Correcte procedure naam','A',Statement.ObjectName);
AssertIdentifierName('Correct procedure name','A',Statement.ObjectName);
AssertEquals('2 return values',2,Statement.OutputVariables.Count);
P:=TSQLProcedureParamDef(CheckClass(Statement.OutputVariables[0],TSQLProcedureParamDef));
AssertIdentifierName('Correct parameter name','P',P.ParamName);
@ -8095,6 +8138,7 @@ initialization
TTestDeclareExternalFunctionParser,
TTestGrantParser,
TTestRevokeParser,
TTestTermParser,
TTestGlobalParser]);
end.

View File

@ -197,8 +197,8 @@ type
Procedure TestStarting;
procedure TestString;
procedure TestSubtype;
Procedure TestSum;
Procedure TestSuspend;
procedure TestSum;
procedure TestSuspend;
Procedure TestTable;
Procedure TestThen;
Procedure TestTime;
@ -244,6 +244,8 @@ type
procedure TestFloatLiteral;
procedure TestStringLiteral1;
procedure TestStringLiteral2;
procedure TestSymbolLiteral1;
procedure TestSymbolLiteral2;
procedure TestStringError;
procedure TestFloatError;
Procedure TestOptionsoDoubleQuoteStringLiteral;
@ -362,7 +364,7 @@ begin
FLineReader:=TStreamLineReader.Create(Fstream);
FScanner:=TSQLScanner.Create(FLineReader);
FScanner.Options:=AOptions;
Result:=FSCanner;
Result:=FScanner;
end;
procedure TTestSQLScanner.FreeScanner;
@ -644,6 +646,16 @@ begin
CheckToken(tsqlSuspend,'Suspend');
end;
procedure TTestSQLScanner.TestSymbolLiteral1;
begin
CheckToken(tsqlSymbolLiteral,'%');
end;
procedure TTestSQLScanner.TestSymbolLiteral2;
begin
CheckToken(tsqlSymbolLiteral,'%^');
end;
procedure TTestSQLScanner.TestStarting;
begin
CheckToken(tsqlStarting,'starting');
@ -1392,8 +1404,8 @@ end;
procedure TTestSQLScanner.TestIdentifier5;
begin
FErrorSource:='$0';
AssertException('Identifier cannot start with _',ESQLScannerError,@TestErrorSource);
// $0 should not be parsed as an identifier but as a symbol literal
CheckToken(tsqlSymbolLiteral,'$0');
end;
procedure TTestSQLScanner.TestIdentifierDotIdentifier;

View File

@ -1,4 +1,4 @@
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="9"/>
@ -13,8 +13,38 @@
<CharSet Value=""/>
<StringTable ProductVersion=""/>
</VersionInfo>
<BuildModes Count="1">
<Item1 Name="default" Default="True"/>
<BuildModes Count="2">
<Item1 Name="Debug" Default="True"/>
<Item2 Name="Release">
<CompilerOptions>
<Version Value="11"/>
<Target>
<Filename Value="testsqlscanner"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<OtherUnitFiles Value="../src/sql"/>
<UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<UseAnsiStrings Value="False"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<SmartLinkUnit Value="True"/>
</CodeGeneration>
<Linking>
<Debugging>
<GenerateDebugInfo Value="False"/>
</Debugging>
<LinkSmart Value="True"/>
</Linking>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
</Item2>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
@ -83,13 +113,22 @@
</SearchPaths>
<Parsing>
<SyntaxOptions>
<IncludeAssertionCode Value="True"/>
<UseAnsiStrings Value="False"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<Checks>
<IOChecks Value="True"/>
<RangeChecks Value="True"/>
<OverflowChecks Value="True"/>
<StackChecks Value="True"/>
</Checks>
<Optimizations>
<OptimizationLevel Value="0"/>
</Optimizations>
</CodeGeneration>
<Other>
<CompilerMessages>
<UseMsgFile Value="True"/>
</CompilerMessages>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>

View File

@ -20,6 +20,8 @@ var
Application: TMyTestRunner;
{$R *.res}
begin
Application := TMyTestRunner.Create(nil);
Application.Initialize;