12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549 |
- {
- This file is part of the Free Component Library
- Copyright (c) 2010-2014 by the Free Pascal development team
- SQL Syntax Tree SQL generation tests
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- unit tcgensql;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, fpcunit, testutils, testregistry,fpsqltree;
- type
- TSQLDropStatementClass = Class of TSQLDropStatement;
- TSQLGranteeClass = Class of TSQLGrantee;
- { TTestGenerateSQL }
- TTestGenerateSQL= class(TTestCase)
- Private
- FToFree:TSQLElement;
- protected
- Procedure SetUp; override;
- Procedure TearDown; override;
- Procedure DoTestDropStatement(AClass: TSQLDropStatementClass; const AObjectName: String);
- Procedure DoTestAlterCreateProcedure(S: TSQLAlterCreateProcedureStatement; PHEAD: String);
- Procedure DoTestAlterCreateTrigger(S: TSQLAlterCreateTriggerStatement; PHEAD: String);
- Function CreateIdentifier(Const AName : TSQLStringType) : TSQLIdentifierName;
- Function CreateGrantee(Const AName : TSQLStringType; AClass : TSQLGranteeClass = Nil) : TSQLGrantee;
- Function CreateLiteral(Const AValue : Integer) : TSQLIntegerLiteral;
- Function CreateLiteral(Const AValue : TSQLStringType) : TSQLStringLiteral;
- Function CreateLiteral(Const AValue : Double) : TSQLFloatLiteral;
- Function CreateTypeDefinition(Const ADataType : TSQLDataType; ALen : Integer = 0): TSQLTypeDefinition;
- Function CreateLiteralExpression(Const ALiteral : TSQLLiteral) : TSQLLiteralExpression;
- Function CreateIdentifierExpression(Const AName : TSQLStringtype) : TSQLIdentifierExpression;
- Function CreateUnaryExpression(Const AOperand : TSQLExpression) : TSQLUnaryExpression;
- Function CreateBinaryExpression(Const ALeft,ARight : TSQLExpression) : TSQLBinaryExpression;
- Function CreateUpdatePair(Const AField : TSQLStringType; AValue : TSQLExpression) : TSQLUpdatePair;
- Function CreateTernaryExpression(Const ALeft,AMiddle,ARight : TSQLExpression) : TSQLTernaryExpression;
- Function CreateForeignKey(Const ATable : TSQLStringType; AFieldName1,AFieldName2 : TSQLStringType):TSQLForeignKeyDefinition;
- Function CreateSelectField(Const AValue : TSQLExpression; Const AAlias : TSQLStringType) : TSQLSelectField;
- Function CreateSimpleTableReference(Const ATableName : TSQLStringType; AAlias : TSQLStringType) : TSQLSimpleTableReference;
- Function CreateJoinTablereference(Const ALeft,ARight : TSQLTableReference) : TSQLJoinTableReference;
- Function CreateSelect(AField : TSQLExpression; ATable : TSQLStringType) : TSQLSelectStatement;
- Procedure AssertSQL(Const AElement : TSQLElement; Const ASQL : TSQLStringType; AOptions : TSQLFormatOptions = []);
- published
- procedure TestIdentifier;
- Procedure TestIntegerLiteral;
- procedure TestStringLiteral;
- Procedure TestFloatLiteral;
- Procedure TestNullLiteral;
- Procedure TestUserLiteral;
- Procedure TestValueLiteral;
- Procedure TestLiteralExpression;
- Procedure TestSelectField;
- Procedure TestSimpleTablereference;
- Procedure TestSimpleSelect;
- Procedure TestAnyExpression;
- procedure TestAllExpression;
- procedure TestExistsExpression;
- procedure TestSomeExpression;
- procedure TestSingularExpression;
- Procedure TestUnaryExpression;
- procedure TestBinaryExpression;
- procedure TestListExpression;
- procedure TestTernaryExpression;
- Procedure TestGenIDExpression;
- Procedure TestFunctionCall;
- procedure TestAggregateFunction;
- procedure TestForeignKey;
- procedure TestUniqueFieldConstraint;
- procedure TestPrimaryKeyFieldConstraint;
- procedure TestForeignKeyFieldConstraint;
- procedure TestCheckFieldConstraint;
- procedure TestTableUniqueConstraintDef;
- procedure TestTablePrimaryKeyConstraintDef;
- procedure TestTableForeignKeyConstraintDef;
- procedure TestTableCheckConstraintDef;
- Procedure TestTypeDefinition;
- Procedure TestCastExpression;
- procedure TestJoinTableReference;
- procedure TestPlanNatural;
- procedure TestPlanIndex;
- procedure TestPlanOrder;
- procedure TestPlanExpression;
- procedure TestOrderBy;
- Procedure TestSelect;
- procedure TestInsert;
- procedure TestUpdatePair;
- procedure TestUpdate;
- procedure TestDelete;
- procedure TestRollback;
- procedure TestCommit;
- procedure TestExecuteProcedure;
- procedure TestCreateGenerator;
- procedure TestCreateRole;
- procedure TestCreateDomain;
- procedure TestAlterDomainDropDefault;
- procedure TestAlterDomainDropCheck;
- Procedure TestAlterDomainSetDefault;
- Procedure TestAlterDomainRename;
- procedure TestAlterDomainNewType;
- procedure TestAlterDomainAddCheck;
- procedure TestCreateException;
- procedure TestAlterException;
- procedure TestCreateIndex;
- procedure TestAlterIndex;
- procedure TestDeclareExternalFunction;
- procedure TestTableFieldDefinition;
- procedure TestCreateTable;
- procedure TestDropFieldOperation;
- procedure TestDropConstraintOperation;
- procedure TestAlterFieldNameOperation;
- procedure TestAlterFieldTypeOperation;
- procedure TestAlterFieldPositionOperation;
- procedure TestAddFieldOperation;
- procedure TestAddConstraintOperation;
- procedure TestAlterTable;
- procedure TestCreateView;
- procedure TestDatabaseFileInfo;
- procedure TestCreateDatabase;
- procedure TestAlterDatabase;
- procedure TestCreateShadow;
- procedure TestSuspend;
- procedure TestExit;
- procedure TestBlock;
- procedure TestAssignment;
- procedure TestIf;
- procedure TestFor;
- procedure TestWhile;
- Procedure TestWhenSQLError;
- Procedure TestWhenGDSError;
- Procedure TestWhenException;
- Procedure TestWhen;
- Procedure TestException;
- Procedure TestPostEvent;
- Procedure TestTriggerProcedure;
- procedure TestCreateProcedure;
- procedure TestAlterProcedure;
- procedure TestCreateTrigger;
- procedure TestAlterTrigger;
- Procedure TestDropStatement;
- procedure TestConnect;
- procedure TestExtract;
- procedure TestParamExpression;
- Procedure TestGrantTable;
- Procedure TestGrantProcedure;
- Procedure TestGrantRole;
- Procedure TestRevokeTable;
- Procedure TestRevokeProcedure;
- Procedure TestRevokeRole;
- end;
- implementation
- procedure TTestGenerateSQL.SetUp;
- begin
- FToFree:=Nil;
- end;
- procedure TTestGenerateSQL.TearDown;
- begin
- FreeAndNil(FToFree);
- end;
- function TTestGenerateSQL.CreateIdentifier(const AName: TSQLStringType
- ): TSQLIdentifierName;
- begin
- Result:=TSQLIdentifierName.Create(Nil);
- Result.Name:=AName;
- FToFree:=Result;
- end;
- function TTestGenerateSQL.CreateGrantee(const AName: TSQLStringType;
- AClass: TSQLGranteeClass = Nil): TSQLGrantee;
- begin
- If AClass=Nil then
- AClass:=TSQLGrantee;
- Result:=AClass.Create(Nil);
- Result.Name:=AName;
- FToFree:=Result;
- end;
- procedure TTestGenerateSQL.AssertSQL(const AElement: TSQLElement;
- const ASQL: TSQLStringType; AOptions: TSQLFormatOptions = []);
- Var
- S,S2 : TSQLStringType;
- L : TStringList;
- I : Integer;
- begin
- S:=AElement.GetAsSQL(AOptions);
- AssertEquals('Correct SQL',ASQL,S);
- end;
- function TTestGenerateSQL.CreateLiteral(const AValue: Integer
- ): TSQLIntegerLiteral;
- begin
- Result:=TSQLintegerLiteral.Create(Nil);
- Result.Value:=AValue;
- FToFree:=Result;
- end;
- function TTestGenerateSQL.CreateLiteral(const AValue: TSQLStringType
- ): TSQLStringLiteral;
- begin
- Result:=TSQLStringLiteral.Create(Nil);
- Result.Value:=AValue;
- FToFree:=Result;
- end;
- function TTestGenerateSQL.CreateLiteral(const AValue: Double
- ): TSQLFloatLiteral;
- begin
- Result:=TSQLFloatLiteral.Create(Nil);
- Result.Value:=AValue;
- FToFree:=Result;
- end;
- function TTestGenerateSQL.CreateTypeDefinition(const ADataType: TSQLDataType;
- ALen: Integer): TSQLTypeDefinition;
- begin
- Result:=TSQLTypeDefinition.Create(Nil);
- Result.DataType:=ADataType;
- Result.Len:=ALen;
- FToFree:=Result;
- end;
- function TTestGenerateSQL.CreateLiteralExpression(const ALiteral: TSQLLiteral
- ): TSQLLiteralExpression;
- begin
- Result:=TSQLLiteralExpression.Create(Nil);
- FToFree:=Result;
- Result.Literal:=ALiteral;
- end;
- function TTestGenerateSQL.CreateIdentifierExpression(const AName: TSQLStringtype
- ): TSQLIdentifierExpression;
- begin
- Result:=TSQLidentifierExpression.Create(Nil);
- Result.Identifier:=CreateIdentifier(AName);
- FTofree:=Result;
- end;
- function TTestGenerateSQL.CreateUnaryExpression(const AOperand: TSQLExpression
- ): TSQLUnaryExpression;
- begin
- Result:=TSQLUnaryExpression.Create(Nil);
- Result.Operand:=AOperand;
- FTofree:=Result;
- end;
- function TTestGenerateSQL.CreateBinaryExpression(const ALeft,
- ARight: TSQLExpression): TSQLBinaryExpression;
- begin
- Result:=TSQLBinaryExpression.Create(Nil);
- Result.Left:=ALeft;
- Result.Right:=ARight;
- FToFree:=Result;
- end;
- function TTestGenerateSQL.CreateUpdatePair(const AField: TSQLStringType;
- AValue: TSQLExpression): TSQLUpdatePair;
- begin
- Result:=TSQLUpdatePair.Create(Nil);
- Result.FieldName:=CreateIdentifier(AFIeld);
- Result.Value:=AValue;
- FTofree:=Result;
- end;
- function TTestGenerateSQL.CreateTernaryExpression(const ALeft, AMiddle,
- ARight: TSQLExpression): TSQLTernaryExpression;
- begin
- Result:=TSQLTernaryExpression.Create(Nil);
- Result.Left:=ALeft;
- Result.Middle:=AMiddle;
- Result.Right:=ARight;
- FToFree:=Result;
- end;
- function TTestGenerateSQL.CreateForeignKey(const ATable: TSQLStringType;
- AFieldName1, AFieldName2: TSQLStringType): TSQLForeignKeyDefinition;
- begin
- Result:=TSQLForeignKeyDefinition.Create(Nil);
- Result.TableName:=CreateIdentifier(ATable);
- Result.FieldList.Add(CreateIdentifier(AFieldName1));
- If (AFieldName2<>'') then
- Result.FieldList.Add(CreateIdentifier(AFieldName2));
- FToFree:=Result;
- end;
- function TTestGenerateSQL.CreateSelectField(const AValue: TSQLExpression;
- const AAlias: TSQLStringType): TSQLSelectField;
- begin
- Result:=TSQLSelectField.Create(Nil);
- Result.Expression:=AValue;
- If (AAlias<>'') then
- Result.AliasName:=CreateIdentifier(AAlias);
- FToFree:=Result;
- end;
- function TTestGenerateSQL.CreateSimpleTableReference(
- const ATableName: TSQLStringType; AAlias: TSQLStringType
- ): TSQLSimpleTableReference;
- begin
- Result:=TSQLSimpleTableReference.Create(Nil);
- Result.ObjectName:=CreateIdentifier(ATableName);
- If AALias<>'' then
- Result.AliasName:=CreateIdentifier(AAlias);
- FTofree:=Result;
- end;
- function TTestGenerateSQL.CreateJoinTablereference(const ALeft,
- ARight: TSQLTableReference): TSQLJoinTableReference;
- begin
- Result:=TSQLJoinTableReference.Create(Nil);
- Result.Left:=ALeft;
- Result.Right:=ARight;
- FTofree:=Result;
- end;
- function TTestGenerateSQL.CreateSelect(AField: TSQLExpression;
- ATable: TSQLStringType): TSQLSelectStatement;
- begin
- Result:=TSQLSelectStatement.Create(Nil);
- Result.Fields.Add(AField);
- Result.Tables.Add(CreateSimpleTableReference(ATable,''));
- FToFree:=Result;
- end;
- procedure TTestGenerateSQL.TestIdentifier;
- Var
- E : TSQLElement;
- begin
- E:=CreateIdentifier('A');
- AssertSQL(E,'A',[]);
- AssertSQL(E,'"A"',[sfoDoubleQuoteIdentifier]);
- AssertSQL(E,'`A`',[sfoBackQuoteIdentifier]);
- AssertSQL(E,'''A''',[sfoSingleQuoteIdentifier]);
- end;
- procedure TTestGenerateSQL.TestIntegerLiteral;
- begin
- AssertSQL(CreateLiteral(1),'1',[]);
- end;
- procedure TTestGenerateSQL.TestStringLiteral;
- Var
- E : TSQLElement;
- begin
- E:=CreateLiteral('A');
- AssertSQL(E,'"A"',[sfoDoubleQuotes]);
- AssertSQL(E,'''A''',[]);
- end;
- procedure TTestGenerateSQL.TestFloatLiteral;
- begin
- // Needs improvement.
- AssertSQL(CreateLiteral(1.2),FloatToStr(1.2));
- end;
- procedure TTestGenerateSQL.TestNullLiteral;
- begin
- FToFree:=TSQLNullLiteral.Create(Nil);
- AssertSQL(FToFree,'NULL');
- AssertSQL(FToFree,'null',[sfoLowerCaseKeyword]);
- end;
- procedure TTestGenerateSQL.TestUserLiteral;
- begin
- FToFree:=TSQLUserLiteral.Create(Nil);
- AssertSQL(FToFree,'USER');
- AssertSQL(FToFree,'user',[sfoLowerCaseKeyword]);
- end;
- procedure TTestGenerateSQL.TestValueLiteral;
- begin
- FToFree:=TSQLValueLiteral.Create(Nil);
- AssertSQL(FToFree,'VALUE');
- AssertSQL(FToFree,'value',[sfoLowerCaseKeyword]);
- end;
- procedure TTestGenerateSQL.TestLiteralExpression;
- Var
- E : TSQLStringLiteral;
- begin
- E:=CreateLiteral('A');
- AssertSQL(CreateLiteralExpression(E),E.GetAsSQL([]),[]);
- end;
- procedure TTestGenerateSQL.TestSelectField;
- Var
- F : TSQLSelectField;
- begin
- F:=CreateSelectField(CreateIdentifierExpression('A'),'');
- AssertSQL(F,'A');
- F.AliasName:=CreateIdentifier('B');
- FTofree:=F;
- AssertSQL(F,'A AS B');
- end;
- procedure TTestGenerateSQL.TestSimpleTablereference;
- Var
- T : TSQLSimpleTablereference;
- begin
- T:=CreateSimpleTablereference('A','');
- AssertSQL(T,'A');
- T.AliasName:=CreateIdentifier('B');
- AssertSQL(T,'A B');
- T.Params:=TSQLElementList.Create(True);
- T.Params.Add(CreateIdentifierExpression('C'));
- FToFree:=T;
- AssertSQL(T,'A(C) B');
- T.Params.Add(CreateIdentifierExpression('D'));
- FToFree:=T;
- AssertSQL(T,'A(C , D) B');
- end;
- procedure TTestGenerateSQL.TestSimpleSelect;
- Var
- S : TSQLSelectStatement;
- begin
- S:=CreateSelect(CreateIdentifierExpression('A'),'B');
- AssertSQL(S,'SELECT A FROM B');
- end;
- procedure TTestGenerateSQL.TestAnyExpression;
- Var
- A : TSQLAnyExpression;
- begin
- A:=TSQLAnyExpression.Create(Nil);
- A.Select:=CreateSelect(CreateIdentifierExpression('A'),'B');
- FTofree:=A;
- AssertSQL(A,'ANY (SELECT A FROM B)');
- end;
- procedure TTestGenerateSQL.TestSomeExpression;
- Var
- A : TSQLSomeExpression;
- begin
- A:=TSQLSomeExpression.Create(Nil);
- A.Select:=CreateSelect(CreateIdentifierExpression('A'),'B');
- FTofree:=A;
- AssertSQL(A,'SOME (SELECT A FROM B)');
- end;
- procedure TTestGenerateSQL.TestExistsExpression;
- Var
- A : TSQLExistsExpression;
- begin
- A:=TSQLExistsExpression.Create(Nil);
- A.Select:=CreateSelect(CreateIdentifierExpression('A'),'B');
- FTofree:=A;
- AssertSQL(A,'EXISTS (SELECT A FROM B)');
- end;
- procedure TTestGenerateSQL.TestAllExpression;
- Var
- A : TSQLAllExpression;
- begin
- A:=TSQLAllExpression.Create(Nil);
- A.Select:=CreateSelect(CreateIdentifierExpression('A'),'B');
- FTofree:=A;
- AssertSQL(A,'ALL (SELECT A FROM B)');
- end;
- procedure TTestGenerateSQL.TestSingularExpression;
- Var
- A : TSQLSingularExpression;
- begin
- A:=TSQLSingularExpression.Create(Nil);
- A.Select:=CreateSelect(CreateIdentifierExpression('A'),'B');
- FTofree:=A;
- AssertSQL(A,'SINGULAR (SELECT A FROM B)');
- end;
- procedure TTestGenerateSQL.TestUnaryExpression;
- Var
- U : TSQLUnaryExpression;
- begin
- U:=CreateUnaryExpression(CreateLiteralExpression(CreateLiteral(1)));
- U.Operation:=uoMinus;
- AssertSQL(U,'-1');
- U.Operation:=uoNot;
- AssertSQL(U,'NOT (1)');
- end;
- procedure TTestGenerateSQL.TestBinaryExpression;
- // boIs, boIsNot, boLike, boContaining, boStarting);
- Var
- B : TSQLBinaryExpression;
- begin
- B:=CreateBinaryExpression(CreateLiteralExpression(CreateLiteral(1)),CreateLiteralExpression(CreateLiteral(2)));
- B.Operation:=boAnd;
- AssertSQL(B,'1 AND 2');
- AssertSQL(B,'1'+sLineBreak+'AND 2',[sfoOneLogicalPerLine]);
- B.Operation:=boOR;
- AssertSQL(B,'1 OR 2');
- AssertSQL(B,'1'+sLineBreak+'OR 2',[sfoOneLogicalPerLine]);
- B.Operation:=boEQ;
- AssertSQL(B,'1 = 2');
- B.Operation:=boLT;
- AssertSQL(B,'1 < 2');
- B.Operation:=boGT;
- AssertSQL(B,'1 > 2');
- B.Operation:=boLE;
- AssertSQL(B,'1 <= 2');
- B.Operation:=boGE;
- AssertSQL(B,'1 >= 2');
- B.Operation:=boNE;
- AssertSQL(B,'1 <> 2');
- B.Operation:=boAdd;
- AssertSQL(B,'1 + 2');
- B.Operation:=boSubtract;
- AssertSQL(B,'1 - 2');
- B.Operation:=boMultiply;
- AssertSQL(B,'1 * 2');
- B.Operation:=boDivide;
- AssertSQL(B,'1 / 2');
- B.Right.Free;
- B.Right:=TSQLSelectExpression.Create(Nil);
- TSQLSelectExpression(B.Right).Select:=CreateSelect(CreateIdentifierExpression('A'),'B');
- FTofree:=B;
- B.Operation:=boIn;
- AssertSQL(B,'1 IN (SELECT A FROM B)');
- B.Operation:=boIS;
- B.Right.Free;
- B.Right:=CreateLiteralExpression(TSQLNullLiteral.Create(Nil));
- FTofree:=B;
- AssertSQL(B,'1 IS NULL');
- B.Operation:=boISNot;
- AssertSQL(B,'1 IS NOT NULL');
- B.Right.Free;
- B.Right:=CreateLiteralExpression(CreateLiteral('%A%'));
- FTofree:=B;
- B.Left.Free;
- B.Left:=CreateLiteralExpression(CreateLiteral('ADAM'));
- FTofree:=B;
- B.Operation:=boLike;
- AssertSQL(B,'''ADAM'' LIKE ''%A%''');
- B.Operation:=boContaining;
- AssertSQL(B,'''ADAM'' CONTAINING ''%A%''');
- B.Operation:=boStarting;
- AssertSQL(B,'''ADAM'' STARTING WITH ''%A%''');
- B.Left.Free;
- B.Left:=CreateBinaryExpression(CreateLiteralExpression(CreateLiteral(1)),CreateLiteralExpression(CreateLiteral(2)));
- TSQLBinaryExpression(B.Left).Operation:=boAdd;
- FTofree:=B;
- B.Right.Free;
- B.Right:=CreateBinaryExpression(CreateLiteralExpression(CreateLiteral(3)),CreateLiteralExpression(CreateLiteral(4)));
- FTofree:=B;
- TSQLBinaryExpression(B.Right).Operation:=boAdd;
- B.Operation:=boLT;
- AssertSQL(B,'(1 + 2) < (3 + 4)');
- end;
- procedure TTestGenerateSQL.TestListExpression;
- Var
- L:TSQLListExpression;
- begin
- L:=TSQLListExpression.Create(Nil);
- FToFree:=L;
- AssertSQL(L,'()');
- L.List.Add(CreateLiteralExpression(CreateLiteral(1)));
- FToFree:=L;
- AssertSQL(L,'(1)');
- L.List.Add(CreateLiteralExpression(CreateLiteral(2)));
- FToFree:=L;
- AssertSQL(L,'(1 , 2)');
- AssertSQL(L,'(1, 2)',[sfoListNoSpaceBeforeComma]);
- AssertSQL(L,'(1 ,2)',[sfoListNoSpaceAfterComma]);
- AssertSQL(L,'(1,2)',[sfoListNoSpaceBeforeComma,sfoListNoSpaceAfterComma]);
- end;
- procedure TTestGenerateSQL.TestTernaryExpression;
- Var
- T : TSQLTernaryExpression;
- begin
- T:=CreateTernaryExpression(CreateLiteralExpression(CreateLiteral(2)),
- CreateLiteralExpression(CreateLiteral(1)),
- CreateLiteralExpression(CreateLiteral(3)));
- T.Operation:=toBetween;
- AssertSQL(T,'2 BETWEEN 1 AND 3');
- FreeAndNil(FToFree);
- T:=CreateTernaryExpression(CreateLiteralExpression(CreateLiteral('A')),
- CreateLiteralExpression(CreateLiteral('B')),
- CreateLiteralExpression(CreateLiteral('C')));
- T.Operation:=toLikeEscape;
- AssertSQL(T,'''A'' LIKE ''B'' ESCAPE ''C''');
- end;
- procedure TTestGenerateSQL.TestGenIDExpression;
- Var
- G : TSQLGenIDExpression;
- begin
- G:=TSQLGenIDExpression.Create(Nil);
- G.Generator:=self.CreateIdentifier('A');
- G.Value:=CreateLiteralExpression(CreateLiteral(1));
- FTofree:=G;
- AssertSQL(G,'GEN_ID(A,1)');
- end;
- procedure TTestGenerateSQL.TestFunctionCall;
- Var
- F : TSQLFunctionCallExpression;
- begin
- F:=TSQLFunctionCallExpression.Create(Nil);
- F.Identifier:='FUNC';
- FTofree:=F;
- AssertSQL(F,'FUNC()');
- F.Arguments:=TSQLElementList.Create(True);
- F.Arguments.Add(CreateLiteralExpression(CreateLiteral(1)));
- FTofree:=F;
- AssertSQL(F,'FUNC(1)');
- F.Arguments.Add(CreateLiteralExpression(CreateLiteral(2)));
- FTofree:=F;
- AssertSQL(F,'FUNC(1 , 2)');
- AssertSQL(F,'func(1,2)',[sfoLowerCaseKeyWord,sfoListNoSpaceBeforeComma,sfoListNoSpaceAfterComma]);
- end;
- procedure TTestGenerateSQL.TestAggregateFunction;
- Var
- A : TSQLAggregateFunctionExpression;
- begin
- A:=TSQLAggregateFunctionExpression.Create(Nil);
- FToFree:=A;
- A.Aggregate:=afCount;
- A.Option:=aoAsterisk;
- AssertSQL(A,'COUNT(*)');
- AssertSQL(A,'count(*)',[sfoLowercaseKeyword]);
- A.Option:=aoNone;
- A.Expression:=CreateIdentifierExpression('A');
- FTofree:=A;
- AssertSQL(A,'COUNT(A)');
- A.Option:=aoDistinct;
- AssertSQL(A,'COUNT(DISTINCT A)');
- A.Option:=aoAll;
- AssertSQL(A,'COUNT(ALL A)');
- A.Aggregate:=afMax;
- A.Option:=aoNone;
- AssertSQL(A,'MAX(A)');
- A.Aggregate:=afMin;
- AssertSQL(A,'MIN(A)');
- A.Aggregate:=afAVG;
- AssertSQL(A,'AVG(A)');
- A.Aggregate:=afSUM;
- AssertSQL(A,'SUM(A)');
- end;
- procedure TTestGenerateSQL.TestForeignKey;
- Var
- K : TSQLForeignKeyDefinition;
- begin
- K:=CreateForeignKey('A','B','');
- FTofree:=K;
- AssertSQL(K,'A (B)') ;
- K.FieldList.Add(CreateIdentifier('C'));
- FTofree:=K;
- AssertSQL(K,'A (B , C)');
- AssertSQL(K,'A (B,C)',[sfoListNoSpaceBeforeComma,sfoListNoSpaceAfterComma]);
- K.OnDelete:=fkaNoAction;
- AssertSQL(K,'A (B , C) ON DELETE NO ACTION');
- K.OnDelete:=fkaCascade;
- AssertSQL(K,'A (B , C) ON DELETE CASCADE');
- K.OnDelete:=fkaSetDefault;
- AssertSQL(K,'A (B , C) ON DELETE SET DEFAULT');
- K.OnDelete:=fkaSetNull;
- AssertSQL(K,'A (B , C) ON DELETE SET NULL');
- K.OnUpdate:=fkaNoaction;
- AssertSQL(K,'A (B , C) ON UPDATE NO ACTION ON DELETE SET NULL');
- K.OnUpdate:=fkaCascade;
- AssertSQL(K,'A (B , C) ON UPDATE CASCADE ON DELETE SET NULL');
- K.OnUpdate:=fkaSetDefault;
- AssertSQL(K,'A (B , C) ON UPDATE SET DEFAULT ON DELETE SET NULL');
- K.OnUpdate:=fkaSetNull;
- AssertSQL(K,'A (B , C) ON UPDATE SET NULL ON DELETE SET NULL');
- K.OnDelete:=fkaNone;
- AssertSQL(K,'A (B , C) ON UPDATE SET NULL');
- end;
- procedure TTestGenerateSQL.TestUniqueFieldConstraint;
- Var
- F : TSQLUniqueFieldConstraint;
- begin
- F:=TSQLUniqueFieldConstraint.Create(Nil);
- FTofree:=F;
- AssertSQL(F,'UNIQUE');
- F.ConstraintName:=CreateIdentifier('A');
- FTofree:=F;
- AssertSQL(F,'CONSTRAINT A UNIQUE');
- AssertSQL(F,'constraint A unique',[sfoLowercaseKeyWord]);
- end;
- procedure TTestGenerateSQL.TestPrimaryKeyFieldConstraint;
- Var
- F : TSQLPrimaryKeyFieldConstraint;
- begin
- F:=TSQLPrimaryKeyFieldConstraint.Create(Nil);
- FTofree:=F;
- AssertSQL(F,'PRIMARY KEY');
- F.ConstraintName:=CreateIdentifier('A');
- FTofree:=F;
- AssertSQL(F,'CONSTRAINT A PRIMARY KEY');
- AssertSQL(F,'constraint A primary key',[sfoLowercaseKeyWord]);
- end;
- procedure TTestGenerateSQL.TestForeignKeyFieldConstraint;
- Var
- F : TSQLForeignKeyFieldConstraint;
- begin
- F:=TSQLForeignKeyFieldConstraint.Create(Nil);
- F.Definition:=CreateForeignKey('B','C','');
- FTofree:=F;
- AssertSQL(F,'REFERENCES B (C)');
- F.ConstraintName:=CreateIdentifier('A');
- FTofree:=F;
- AssertSQL(F,'CONSTRAINT A REFERENCES B (C)');
- AssertSQL(F,'constraint A references B (C)',[sfoLowercaseKeyWord]);
- end;
- procedure TTestGenerateSQL.TestCheckFieldConstraint;
- Var
- F : TSQLCheckFieldConstraint;
- begin
- F:=TSQLCheckFieldConstraint.Create(Nil);
- F.Expression:=CreateBinaryExpression(CreateLiteralExpression(TSQLValueLiteral.Create(Nil)),CreateLiteralExpression(CreateLiteral(1)));
- TSQLBinaryExpression(F.Expression).Operation:=boGT;
- FTofree:=F;
- AssertSQL(F,'CHECK (VALUE > 1)');
- F.ConstraintName:=CreateIdentifier('A');
- FTofree:=F;
- AssertSQL(F,'CONSTRAINT A CHECK (VALUE > 1)');
- AssertSQL(F,'constraint A check (value > 1)',[sfoLowercaseKeyWord]);
- end;
- procedure TTestGenerateSQL.TestTableUniqueConstraintDef;
- Var
- U : TSQLTableUniqueConstraintDef;
- begin
- U:=TSQLTableUniqueConstraintDef.Create(Nil);
- U.FieldList.Add(CreateIdentifier('A'));
- FToFree:=U;
- AssertSQL(U,'UNIQUE (A)');
- U.ConstraintName:=CreateIdentifier('C');
- FToFree:=U;
- AssertSQL(U,'CONSTRAINT C UNIQUE (A)');
- U.FieldList.Add(CreateIdentifier('B'));
- FToFree:=U;
- AssertSQL(U,'CONSTRAINT C UNIQUE (A , B)');
- AssertSQL(U,'constraint C unique (A , B)',[sfoLowercaseKeyWord]);
- end;
- procedure TTestGenerateSQL.TestTableprimaryKeyConstraintDef;
- Var
- U : TSQLTablePrimaryKeyConstraintDef;
- begin
- U:=TSQLTablePrimaryKeyConstraintDef.Create(Nil);
- U.FieldList.Add(CreateIdentifier('A'));
- FToFree:=U;
- AssertSQL(U,'PRIMARY KEY (A)');
- U.ConstraintName:=CreateIdentifier('C');
- FToFree:=U;
- AssertSQL(U,'CONSTRAINT C PRIMARY KEY (A)');
- U.FieldList.Add(CreateIdentifier('B'));
- FToFree:=U;
- AssertSQL(U,'CONSTRAINT C PRIMARY KEY (A , B)');
- AssertSQL(U,'constraint C primary key (A , B)',[sfoLowercaseKeyWord]);
- end;
- procedure TTestGenerateSQL.TestTableForeignKeyConstraintDef;
- Var
- U : TSQLTableForeignKeyConstraintDef;
- begin
- U:=TSQLTableForeignKeyConstraintDef.Create(Nil);
- U.FieldList.Add(CreateIdentifier('A'));
- U.Definition:=CreateForeignKey('D','E','');
- FToFree:=U;
- AssertSQL(U,'FOREIGN KEY (A) REFERENCES D (E)');
- U.ConstraintName:=CreateIdentifier('C');
- FToFree:=U;
- AssertSQL(U,'CONSTRAINT C FOREIGN KEY (A) REFERENCES D (E)');
- U.FieldList.Add(CreateIdentifier('B'));
- U.Definition.FieldList.Add(CreateIdentifier('F'));
- FToFree:=U;
- AssertSQL(U,'CONSTRAINT C FOREIGN KEY (A , B) REFERENCES D (E , F)');
- AssertSQL(U,'constraint C foreign key (A,B) references D (E,F)',[sfoLowercaseKeyWord,sfoListNoSpaceBeforeComma,sfoListNoSpaceAfterComma]);
- end;
- procedure TTestGenerateSQL.TestTableCheckConstraintDef;
- Var
- F : TSQLTableCheckConstraintDef;
- begin
- F:=TSQLTableCheckConstraintDef.Create(Nil);
- F.Check:=CreateBinaryExpression(CreateIdentifierExpression('A'),CreateLiteralExpression(CreateLiteral(1)));
- TSQLBinaryExpression(F.Check).Operation:=boGT;
- FTofree:=F;
- AssertSQL(F,'CHECK (A > 1)');
- F.ConstraintName:=CreateIdentifier('C');
- FTofree:=F;
- AssertSQL(F,'CONSTRAINT C CHECK (A > 1)');
- AssertSQL(F,'constraint C check (A > 1)',[sfoLowercaseKeyWord]);
- end;
- procedure TTestGenerateSQL.TestTypeDefinition;
- Var
- T : TSQLTypeDefinition;
- begin
- T:=CreateTypeDefinition(sdtInteger,0);
- AssertSQl(T,'INT');
- T.DataType:=sdtSmallInt;
- AssertSQl(T,'SMALLINT');
- T.DataType:=sdtDoublePrecision;
- AssertSQl(T,'DOUBLE PRECISION');
- T.DataType:=sdtFloat;
- AssertSQl(T,'FLOAT');
- T.DataType:=sdtDate;
- AssertSQl(T,'DATE');
- T.DataType:=sdtDateTime;
- AssertSQl(T,'TIMESTAMP');
- T.DataType:=sdtTime;
- AssertSQl(T,'TIME');
- T.DataType:=sdtChar;
- T.Len:=5;
- AssertSQl(T,'CHAR(5)');
- T.DataType:=sdtVarChar;
- AssertSQl(T,'VARCHAR(5)');
- T.DataType:=sdtNChar;
- AssertSQl(T,'NATIONAL CHARACTER(5)');
- T.DataType:=sdtNVarChar;
- AssertSQl(T,'NATIONAL CHARACTER VARYING(5)');
- T.DataType:=sdtDecimal;
- T.Scale:=2;
- AssertSQl(T,'DECIMAL(5,2)');
- T.Scale:=0;
- AssertSQl(T,'DECIMAL(5)');
- T.DataType:=sdtNumeric;
- T.Scale:=2;
- AssertSQl(T,'NUMERIC(5,2)');
- T.Scale:=0;
- AssertSQl(T,'NUMERIC(5)');
- T.DataType:=sdtBlob;
- AssertSQL(T,'BLOB SUB_TYPE 0 SEGMENT_SIZE 5');
- T.Len:=0;
- AssertSQL(T,'BLOB SUB_TYPE 0');
- T.DataType:=sdtInteger;
- T.NotNull:=True;
- AssertSQL(T,'INT NOT NULL');
- T.DefaultValue:=CreateLiteral(1);
- AssertSQL(T,'INT DEFAULT 1 NOT NULL');
- T.Check:=CreateBinaryExpression(CreateLiteralExpression(TSQLValueLiteral.Create(Nil)),CreateLiteralExpression(CreateLiteral(1)));
- FToFree:=T;
- TSQLBinaryExpression(T.Check).Operation:=boGE;
- AssertSQL(T,'INT DEFAULT 1 NOT NULL CHECK (VALUE >= 1)');
- T.DefaultValue.Free;
- T.DefaultValue:=Nil;
- AssertSQL(T,'INT NOT NULL CHECK (VALUE >= 1)');
- T.Constraint:=TSQLCheckFieldConstraint.Create(Nil);
- TSQLCheckFieldConstraint(T.Constraint).Expression:=T.check;
- T.Check:=Nil;
- AssertSQL(T,'INT NOT NULL CHECK (VALUE >= 1)');
- TSQLCheckFieldConstraint(T.Constraint).ConstraintName:=CreateIdentifier('C');
- FToFree:=T;
- AssertSQL(T,'INT NOT NULL CONSTRAINT C CHECK (VALUE >= 1)');
- T.Constraint.Free;
- T.Constraint:=Nil;
- T.NotNull:=False;
- T.DataType:=sdtChar;
- T.Len:=50;
- T.CharSet:='UTF-8';
- AssertSQL(T,'CHAR(50) CHARACTER SET UTF-8');
- T.Collation:=TSQLCollation.Create(Nil);
- T.Collation.Name:='MyCol';
- AssertSQL(T,'CHAR(50) CHARACTER SET UTF-8 COLLATION MYCOL');
- end;
- procedure TTestGenerateSQL.TestCastExpression;
- Var
- C : TSQLCastExpression;
- begin
- C:=TSQLCastExpression.Create(Nil);
- FToFree:=C;
- C.Value:=CreateLiteralExpression(CreateLiteral(1));
- C.NewType:=CreateTypeDefinition(sdtNumeric,5);
- C.NewType.Scale:=2;
- FToFree:=C;
- AssertSQL(C,'CAST(1 AS NUMERIC(5,2))');
- end;
- procedure TTestGenerateSQL.TestJoinTableReference;
- var
- J,J2 : TSQLJoinTableReference;
- begin
- J:=CreateJoinTableReference(CreateSimpleTableReference('A',''),CreateSimpleTableReference('B',''));
- J.JoinClause:=CreateBinaryExpression(CreateIdentifierExpression('C'),CreateIdentifierExpression('D'));
- TSQLBinaryExpression(J.JoinClause).Operation:=boEQ;
- J.JoinType:=jtInner;
- FToFree:=J;
- AssertSQL(J,'A INNER JOIN B ON (C = D)');
- J.JoinType:=jtLeft;
- AssertSQL(J,'A LEFT JOIN B ON (C = D)');
- J.JoinType:=jtRight;
- AssertSQL(J,'A RIGHT JOIN B ON (C = D)');
- J.JoinType:=jtFullOuter;
- AssertSQL(J,'A FULL OUTER JOIN B ON (C = D)');
- AssertSQL(J,'A'+sLinebreak+'FULL OUTER JOIN B ON (C = D)',[sfoOneTablePerLine]);
- AssertSQL(J,'A'+sLinebreak+' FULL OUTER JOIN B ON (C = D)',[sfoOneTablePerLine,sfoIndentTables]);
- J2:=CreateJoinTableReference(CreateSimpleTableReference('E',''),CreateSimpleTableReference('F',''));
- J2.JoinClause:=CreateBinaryExpression(CreateIdentifierExpression('G'),CreateIdentifierExpression('H'));
- TSQLBinaryExpression(J2.JoinClause).Operation:=boEQ;
- J.Right.Free;
- J.Right:=J2;
- FTofree:=J;
- AssertSQL(J,'A FULL OUTER JOIN (E JOIN F ON (G = H)) ON (C = D)');
- AssertSQL(J,'A FULL OUTER JOIN E JOIN F ON (G = H) ON (C = D)',[sfoNoBracketRightJoin]);
- J.Right:=J.Left;
- J.Left:=J2;
- AssertSQL(J,'(E JOIN F ON (G = H)) FULL OUTER JOIN A ON (C = D)',[sfoBracketLeftJoin]);
- end;
- procedure TTestGenerateSQL.TestPlanNatural;
- Var
- N : TSQLSelectNaturalPlan;
- begin
- N:=TSQLSelectNaturalPlan.Create(Nil);
- N.TableName:=CreateIdentifier('A');
- FToFree:=N;
- AssertSQL(N,'A NATURAL');
- AssertSQL(N,'A natural',[sfoLowercaseKeyword]);
- end;
- procedure TTestGenerateSQL.TestPlanIndex;
- Var
- I : TSQLSelectIndexedPlan;
- begin
- I:=TSQLSelectIndexedPlan.Create(Nil);
- I.TableName:=CreateIdentifier('A');
- I.Indexes.Add(CreateIdentifier('B'));
- FToFree:=I;
- AssertSQL(I,'A INDEX (B)');
- AssertSQL(I,'A index (B)',[sfoLowercaseKeyword]);
- I.Indexes.Add(CreateIdentifier('C'));
- FToFree:=I;
- AssertSQL(I,'A INDEX (B,C)',[sfoListNoSpacebeforeComma,sfoListNoSpaceAfterComma]);
- end;
- procedure TTestGenerateSQL.TestPlanOrder;
- Var
- I : TSQLSelectOrderedPlan;
- begin
- I:=TSQLSelectOrderedPlan.Create(Nil);
- I.TableName:=CreateIdentifier('A');
- I.OrderIndex:=CreateIdentifier('B');
- FToFree:=I;
- AssertSQL(I,'A ORDER B');
- AssertSQL(I,'A order B',[sfoLowercaseKeyword]);
- end;
- procedure TTestGenerateSQL.TestPlanExpression;
- Var
- P : TSQLSelectPlanExpr;
- N : TSQLSelectNaturalPlan;
- I : TSQLSelectIndexedPlan;
- begin
- P:=TSQLSelectPlanExpr.Create(Nil);
- P.JoinType:=pjtJoin;
- N:=TSQLSelectNaturalPlan.Create(Nil);
- N.TableName:=CreateIdentifier('STATE');
- P.Items.Add(N);
- I:=TSQLSelectIndexedPlan.Create(Nil);
- I.TableName:=CreateIdentifier('CITIES');
- I.Indexes.Add(CreateIdentifier('DUPE_CITY'));
- P.Items.Add(I);
- I:=TSQLSelectIndexedPlan.Create(Nil);
- I.TableName:=CreateIdentifier('MAYORS');
- I.Indexes.Add(CreateIdentifier('MAYORS_1'));
- P.Items.Add(I);
- FToFree:=P;
- AssertSQL(P,'JOIN (STATE NATURAL , CITIES INDEX (DUPE_CITY) , MAYORS INDEX (MAYORS_1))');
- end;
- procedure TTestGenerateSQL.TestOrderBy;
- Var
- O : TSQLOrderByElement;
- begin
- O:=TSQLOrderByElement.Create(Nil);
- FToFree:=O;
- O.Field:=CreateLiteral(1);
- AssertSQL(O,'1');
- AssertSQL(O,'1 ASC',[sfoForceAscending]);
- AssertSQL(O,'1 asc',[sfoForceAscending,sfoLowerCaseKeyword]);
- O.OrderBy:=obDescending;
- O.Field.free;
- O.Field:=CreateIdentifier('A');
- AssertSQL(O,'A desc',[sfoForceAscending,sfoLowerCaseKeyword]);
- AssertSQL(O,'A DESC',[sfoForceAscending]);
- AssertSQL(O,'A DESC');
- O.Collation:=CreateIdentifier('UTF8');
- AssertSQL(O,'A DESC UTF8');
- end;
- procedure TTestGenerateSQL.TestSelect;
- Var
- S : TSQLSelectStatement;
- begin
- S:=CreateSelect(CreateIdentifierExpression('A'),'B');
- AssertSQL(S,'SELECT A FROM B');
- AssertSQL(S,'SELECT'+sLineBreak+'A'+sLineBreak+'FROM B',[sfoOneFieldPerLine]);
- AssertSQL(S,'SELECT'+sLineBreak+' A'+sLineBreak+'FROM B',[sfoOneFieldPerLine,sfoIndentFields]);
- AssertSQL(S,'SELECT A FROM'+SlineBreak+'B',[sfoOneTablePerLine]);
- AssertSQL(S,'SELECT A FROM'+SlineBreak+' B',[sfoOneTablePerLine,sfoIndentTables]);
- AssertSQL(S,'SELECT'+sLineBreak+'A'+sLineBreak+'FROM'+sLineBreak+'B',[sfoOneFieldPerLine,sfoOneTablePerLine]);
- S.Where:=CreateBinaryExpression(CreateIdentifierExpression('C'),CreateIdentifierExpression('D'));
- TSQLBinaryExpression(S.Where).Operation:=boEQ;
- AssertSQL(S,'SELECT A FROM B WHERE C = D');
- AssertSQL(S,'SELECT A FROM B WHERE'+sLineBreak+'C = D',[sfoWhereOnSeparateLine]);
- AssertSQL(S,'SELECT A FROM B WHERE'+sLineBreak+' C = D',[sfoWhereOnSeparateLine,sfoIndentwhere]);
- AssertSQL(S,'SELECT A FROM'+sLineBreak+'B'+sLineBreak+'WHERE'+sLineBreak+' C = D',[sfoOneTablePerLine,sfoWhereOnSeparateLine,sfoIndentwhere]);
- AssertSQL(S,'SELECT A FROM'+sLineBreak+'B'+sLineBreak+'WHERE'+sLineBreak+' C = D',[sfoOneTablePerLine,sfoWhereOnSeparateLine,sfoIndentwhere]);
- S.GroupBy.Add(CreateIdentifier('A'));
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY A');
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY'+sLineBreak+'A',[sfoOneGroupbyFieldPerLine]);
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY'+sLineBreak+' A',[sfoOneGroupbyFieldPerLine,sfoIndentGroupByFields]);
- AssertSQL(S,'SELECT A FROM B WHERE'+sLineBreak+'C = D'+sLineBreak+'GROUP BY'+sLineBreak+' A',[sfoWhereOnSeparateLine,sfoOneGroupbyFieldPerLine,sfoIndentGroupByFields]);
- S.OrderBy.Add(CreateIdentifier('E'));
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY A ORDER BY E');
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY A ORDER BY'+sLineBreak+'E',[sfoOneOrderbyFieldPerLine]);
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY'+sLineBreak+'A'+sLineBreak+'ORDER BY'+sLineBreak+' E',[sfoOneGroupbyFieldPerLine,sfoOneOrderbyFieldPerLine,sfoIndentOrderByFields]);
- S.Having:=CreateBinaryExpression(CreateIdentifierExpression('F'),CreateIdentifierExpression('G'));
- TSQLBinaryExpression(S.Having).Operation:=boGT;
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY A HAVING F > G ORDER BY E');
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY A HAVING'+sLineBreak+'F > G'+sLineBreak+'ORDER BY E',[sfoHavingOnSeparateLine]);
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY A HAVING'+sLineBreak+' F > G'+sLineBreak+'ORDER BY E',[sfoHavingOnSeparateLine,sfoIndentHaving]);
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY'+sLineBreak+'A'+sLineBreak+'HAVING'+sLineBreak+'F > G'+sLineBreak+'ORDER BY E',[sfoOneGroupbyFieldPerLine,sfoHavingOnSeparateLine]);
- S.Union:=CreateSelect(CreateIdentifierExpression('H'),'I');
- S.OrderBy.Delete(0);
- S.OrderBy.Add(CreateLiteral(1));
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY A HAVING F > G UNION SELECT H FROM I ORDER BY 1');
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY A HAVING F > G'+sLineBreak+'UNION'+sLineBreak+'SELECT H FROM I'+sLineBreak+'ORDER BY 1',[sfoUnionOnSeparateLine]);
- S.Union.Free;
- S.Union:=Nil;
- FToFree:=S;
- S.Plan:=TSQLSelectNaturalPlan.Create(Nil);
- TSQLSelectNaturalPlan(S.PLan).TableName:=CreateIdentifier('B');
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY A HAVING F > G PLAN B NATURAL ORDER BY 1');
- AssertSQL(S,'SELECT A FROM B WHERE C = D GROUP BY A HAVING F > G'+sLineBreak+'PLAN'+sLineBreak+'B NATURAL'+sLineBreak+'ORDER BY 1',[sfoPlanOnSeparateLine]);
- end;
- procedure TTestGenerateSQL.TestInsert;
- Var
- I : TSQLInsertStatement;
- begin
- I:=TSQLInsertStatement.Create(Nil);
- I.TableName:=CreateIdentifier('A');
- FToFree:=I;
- I.Values:=TSQLelementList.Create(True);
- I.Values.Add(CreateLiteral('B'));
- AssertSQL(I,'INSERT INTO A VALUES (''B'')');
- I.Fields:=TSQLelementList.Create(True);
- I.Fields.Add(CreateIdentifier('C'));
- AssertSQL(I,'INSERT INTO A (C) VALUES (''B'')');
- AssertSQL(I,'INSERT INTO A'+sLineBreak+'(C)'+sLineBreak+'VALUES'+sLineBreak+'(''B'')',[sfoOneFieldPerLine]);
- I.Fields.Add(CreateIdentifier('D'));
- I.Values.Add(CreateLiteral('E'));
- AssertSQL(I,'INSERT INTO A (C, D) VALUES (''B'', ''E'')');
- AssertSQL(I,'INSERT INTO A'+sLineBreak+'(C,'+sLineBreak+'D)'+sLineBreak+'VALUES'+sLineBreak+'(''B'','+sLineBreak+'''E'')',[sfoOneFieldPerLine]);
- AssertSQL(I,'INSERT INTO A'+sLineBreak+' (C,'+sLineBreak+' D)'+sLineBreak+'VALUES'+sLineBreak+' (''B'','+sLineBreak+' ''E'')',[sfoOneFieldPerLine,sfoIndentFields]);
- I.Select:=CreateSelect(CreateIdentifierExpression('E'),'G');
- I.Select.Fields.Add(CreateIdentifierExpression('F'));
- AssertSQL(I,'INSERT INTO A (C, D) SELECT E, F FROM G');
- end;
- procedure TTestGenerateSQL.TestUpdatePair;
- Var
- P : TSQLUpdatePair;
- begin
- P:=CreateUpdatePair('A',CreateLiteralExpression(CreateLiteral(1)));
- AssertSQl(P,'A = 1');
- end;
- procedure TTestGenerateSQL.TestUpdate;
- Var
- U : TSQLUpdateStatement;
- P : TSQLUpdatePair;
- begin
- P:=CreateUpdatePair('A',CreateLiteralExpression(CreateLiteral(1)));
- U:=TSQLUpdateStatement.Create(Nil);
- U.TableName:=CreateIdentifier('B');
- U.Values.Add(P);
- FTofree:=U;
- AssertSQL(U,'UPDATE B SET A = 1');
- AssertSQL(U,'UPDATE B SET'+sLineBreak+'A = 1',[sfoOneFieldPerLine]);
- AssertSQL(U,'UPDATE B SET'+sLineBreak+' A = 1',[sfoOneFieldPerLine,sfoIndentFields]);
- P:=CreateUpdatePair('C',CreateLiteralExpression(CreateLiteral(2)));
- U.Values.Add(P);
- FTofree:=U;
- AssertSQL(U,'UPDATE B SET A = 1, C = 2');
- AssertSQL(U,'UPDATE B SET'+sLineBreak+'A = 1,'+sLineBreak+'C = 2',[sfoOneFieldPerLine]);
- AssertSQL(U,'UPDATE B SET'+sLineBreak+' A = 1,'+sLineBreak+' C = 2',[sfoOneFieldPerLine,sfoIndentFields]);
- U.WhereClause:=CreateBinaryExpression(CreateIdentifierExpression('A'),CreateLiteralExpression(CreateLiteral(1)));
- TSQLBinaryExpression(U.WhereClause).Operation:=boGT;
- AssertSQL(U,'UPDATE B SET A = 1, C = 2 WHERE A > 1');
- AssertSQL(U,'UPDATE B SET'+sLineBreak+' A = 1,'+sLineBreak+' C = 2'+sLineBreak+'WHERE A > 1',[sfoOneFieldPerLine,sfoIndentFields]);
- AssertSQL(U,'UPDATE B SET A = 1, C = 2'+sLineBreak+'WHERE'+sLineBreak+'A > 1',[sfoWhereOnSeparateLine]);
- AssertSQL(U,'UPDATE B SET A = 1, C = 2'+sLineBreak+'WHERE'+sLineBreak+' A > 1',[sfoWhereOnSeparateLine,sfoIndentWhere]);
- end;
- procedure TTestGenerateSQL.TestDelete;
- Var
- D : TSQLDeleteStatement;
- begin
- D:=TSQLDeleteStatement.Create(Nil);
- D.TableName:=CreateIdentifier('A');
- FToFree:=D;
- AssertSQL(D,'DELETE FROM A');
- D.WhereClause:=CreateBinaryExpression(CreateIdentifierExpression('B'),CreateLiteralExpression(CreateLiteral(1)));
- TSQLBinaryExpression(D.WhereClause).Operation:=boGT;
- FToFree:=D;
- AssertSQL(D,'DELETE FROM A WHERE B > 1');
- AssertSQL(D,'DELETE FROM A'+sLineBreak+'WHERE'+sLineBreak+'B > 1',[sfoWhereOnSeparateLine]);
- AssertSQL(D,'DELETE FROM A'+sLineBreak+'WHERE'+sLineBreak+' B > 1',[sfoWhereOnSeparateLine,sfoIndentWhere]);
- end;
- procedure TTestGenerateSQL.TestRollback;
- Var
- R : TSQLRollBackStatement;
- begin
- R:=TSQLRollBackStatement.Create(Nil);
- FTofree:=R;
- AssertSQL(R,'ROLLBACK');
- R.TransactionName:=CreateIdentifier('A');
- FTofree:=R;
- AssertSQL(R,'ROLLBACK TRANSACTION A');
- R.Work:=True;
- AssertSQL(R,'ROLLBACK TRANSACTION A WORK');
- R.Release:=True;
- AssertSQL(R,'ROLLBACK TRANSACTION A WORK RELEASE');
- end;
- procedure TTestGenerateSQL.TestCommit;
- Var
- C : TSQLCommitStatement;
- begin
- C:=TSQLCommitStatement.Create(Nil);
- FTofree:=C;
- AssertSQL(C,'COMMIT');
- C.TransactionName:=CreateIdentifier('A');
- FTofree:=C;
- AssertSQL(C,'COMMIT TRANSACTION A');
- C.Work:=True;
- AssertSQL(C,'COMMIT TRANSACTION A WORK');
- C.Release:=True;
- AssertSQL(C,'COMMIT TRANSACTION A WORK RELEASE');
- C.Release:=False;
- C.Retain:=True;
- AssertSQL(C,'COMMIT TRANSACTION A WORK RETAIN');
- end;
- procedure TTestGenerateSQL.TestExecuteProcedure;
- Var
- E : TSQLExecuteProcedureStatement;
- begin
- E:=TSQLExecuteProcedureStatement.Create(Nil);
- E.ProcedureName:=CreateIdentifier('A');
- FTofree:=E;
- AssertSQL(E,'EXECUTE PROCEDURE A');
- E.Params.Add(CreateLiteralExpression(CreateLiteral(1)));
- FTofree:=E;
- AssertSQL(E,'EXECUTE PROCEDURE A(1)');
- E.Params.Add(CreateLiteralExpression(CreateLiteral(2)));
- FTofree:=E;
- AssertSQL(E,'EXECUTE PROCEDURE A(1 , 2)');
- E.Returning.Add(CreateIdentifier('B'));
- FTofree:=E;
- AssertSQL(E,'EXECUTE PROCEDURE A(1 , 2) RETURNING_VALUES :B');
- end;
- procedure TTestGenerateSQL.TestCreateGenerator;
- Var
- G : TSQLCreateGeneratorStatement;
- begin
- G:=TSQLCreateGeneratorStatement.Create(Nil);
- G.ObjectName:=CreateIdentifier('A');
- FToFree:=G;
- AssertSQL(G,'CREATE GENERATOR A');
- end;
- procedure TTestGenerateSQL.TestCreateRole;
- Var
- R : TSQLCreateRoleStatement;
- begin
- R:=TSQLCreateRoleStatement.Create(Nil);
- R.ObjectName:=CreateIdentifier('A');
- FToFree:=R;
- AssertSQL(R,'CREATE ROLE A');
- end;
- procedure TTestGenerateSQL.TestCreateDomain;
- Var
- D : TSQLCreateDomainStatement;
- begin
- D:=TSQLCreateDomainStatement.Create(Nil);
- D.ObjectName:=CreateIdentifier('A');
- D.TypeDefinition:=CreateTypeDefinition(sdtInteger,0);
- D.TypeDefinition.NotNull:=True;
- FToFree:=D;
- AssertSQL(D,'CREATE DOMAIN A INT NOT NULL');
- end;
- procedure TTestGenerateSQL.TestAlterDomainDropDefault;
- Var
- A : TSQLAlterDomainDropDefaultStatement;
- begin
- A:=TSQLAlterDomainDropDefaultStatement.Create(Nil);
- A.Objectname:=CreateIdentifier('A');
- FToFree:=A;
- AssertSQL(A,'ALTER DOMAIN A DROP DEFAULT');
- end;
- procedure TTestGenerateSQL.TestAlterDomainDropCheck;
- Var
- A : TSQLAlterDomainDropCheckStatement;
- begin
- A:=TSQLAlterDomainDropCheckStatement.Create(Nil);
- A.Objectname:=CreateIdentifier('A');
- FToFree:=A;
- AssertSQL(A,'ALTER DOMAIN A DROP CHECK');
- end;
- procedure TTestGenerateSQL.TestAlterDomainSetDefault;
- Var
- A : TSQLAlterDomainSetDefaultStatement;
- begin
- A:=TSQLAlterDomainSetDefaultStatement.Create(Nil);
- A.Objectname:=CreateIdentifier('A');
- A.DefaultValue:=TSQLNullLiteral.Create(Nil);
- FToFree:=A;
- AssertSQL(A,'ALTER DOMAIN A SET DEFAULT NULL');
- end;
- procedure TTestGenerateSQL.TestAlterDomainRename;
- Var
- A : TSQLAlterDomainRenameStatement;
- begin
- A:=TSQLAlterDomainRenameStatement.Create(Nil);
- A.Objectname:=CreateIdentifier('A');
- A.NewName:=CreateIdentifier('B');
- FToFree:=A;
- AssertSQL(A,'ALTER DOMAIN A B');
- end;
- procedure TTestGenerateSQL.TestAlterDomainNewType;
- Var
- A : TSQLAlterDomainTypeStatement;
- begin
- A:=TSQLAlterDomainTypeStatement.Create(Nil);
- A.Objectname:=CreateIdentifier('A');
- A.NewType:=CreateTypeDefinition(sdtVarChar,5);
- FToFree:=A;
- AssertSQL(A,'ALTER DOMAIN A TYPE VARCHAR(5)');
- end;
- procedure TTestGenerateSQL.TestAlterDomainAddCheck;
- Var
- A : TSQLAlterDomainAddCheckStatement;
- begin
- A:=TSQLAlterDomainAddCheckStatement.Create(Nil);
- A.Objectname:=CreateIdentifier('A');
- A.Check:=CreateBinaryExpression(CreateLiteralExpression(TSQLValueLiteral.Create(Nil)),CreateLiteralExpression(CreateLiteral(1)));
- TSQLBinaryExpression(A.Check).Operation:=boGT;
- FToFree:=A;
- AssertSQL(A,'ALTER DOMAIN A ADD CHECK VALUE > 1');
- end;
- procedure TTestGenerateSQL.TestCreateException;
- Var
- C : TSQLCreateExceptionStatement;
- begin
- C:=TSQLCreateExceptionStatement.Create(Nil);
- C.ObjectName:=CreateIdentifier('A');
- C.ExceptionMessage:=CreateLiteral('B');
- FToFree:=C;
- AssertSQL(C,'CREATE EXCEPTION A ''B''');
- end;
- procedure TTestGenerateSQL.TestAlterException;
- Var
- C : TSQLAlterExceptionStatement;
- begin
- C:=TSQLAlterExceptionStatement.Create(Nil);
- C.ObjectName:=CreateIdentifier('A');
- C.ExceptionMessage:=CreateLiteral('B');
- FToFree:=C;
- AssertSQL(C,'ALTER EXCEPTION A ''B''');
- end;
- procedure TTestGenerateSQL.TestCreateIndex;
- Var
- I : TSQLCreateIndexStatement;
- begin
- I:=TSQLCreateIndexStatement.Create(Nil);
- I.ObjectName:=CreateIdentifier('A');
- I.TableName:=CreateIdentifier('B');
- I.FieldNames.Add(CreateIdentifier('C'));
- FTofree:=I;
- AssertSQL(I,'CREATE INDEX A ON B (C)');
- I.FieldNames.Add(CreateIdentifier('D'));
- FTofree:=I;
- AssertSQL(I,'CREATE INDEX A ON B (C , D)');
- I.Options:=[ioUnique];
- AssertSQL(I,'CREATE UNIQUE INDEX A ON B (C , D)');
- I.Options:=[ioAscending];
- AssertSQL(I,'CREATE ASCENDING INDEX A ON B (C , D)');
- I.Options:=[ioUnique,ioDescending];
- AssertSQL(I,'CREATE UNIQUE DESCENDING INDEX A ON B (C , D)');
- I.Options:=[ioUnique,ioAscending,ioDescending];
- AssertSQL(I,'CREATE UNIQUE ASCENDING INDEX A ON B (C , D)');
- I.Options:=[ioDescending];
- AssertSQL(I,'CREATE DESCENDING INDEX A ON B (C , D)');
- end;
- procedure TTestGenerateSQL.TestAlterIndex;
- Var
- I : TSQLAlterIndexStatement;
- begin
- I:=TSQLAlterIndexStatement.Create(Nil);
- I.ObjectName:=CreateIdentifier('A');
- FTofree:=I;
- AssertSQL(I,'ALTER INDEX A ACTIVE');
- I.Inactive:=True;
- AssertSQL(I,'ALTER INDEX A INACTIVE');
- end;
- procedure TTestGenerateSQL.TestDeclareExternalFunction;
- Var
- F : TSQLDeclareExternalFunctionStatement;
- begin
- F:=TSQLDeclareExternalFunctionStatement.Create(Nil);
- F.ObjectName:=CreateIdentifier('A');
- F.ReturnType:=CreateTypeDefinition(sdtChar,5);
- F.EntryPoint:='B';
- F.ModuleName:='C';
- FToFree:=F;
- AssertSQL(F,'DECLARE EXTERNAL FUNCTION A RETURNS CHAR(5) ENTRY_POINT ''B'' MODULE_NAME ''C''');
- F.Arguments.Add(CreateTypeDefinition(sdtChar,10));
- AssertSQL(F,'DECLARE EXTERNAL FUNCTION A CHAR(10) RETURNS CHAR(5) ENTRY_POINT ''B'' MODULE_NAME ''C''');
- F.Arguments.Add(CreateTypeDefinition(sdtInteger,0));
- AssertSQL(F,'DECLARE EXTERNAL FUNCTION A CHAR(10) , INT RETURNS CHAR(5) ENTRY_POINT ''B'' MODULE_NAME ''C''');
- AssertSQL(F,'DECLARE EXTERNAL FUNCTION A'+sLineBreak+
- ' CHAR(10) , INT'+sLineBreak+
- ' RETURNS CHAR(5)'+sLineBreak+
- ' ENTRY_POINT ''B'''+sLineBreak+
- ' MODULE_NAME ''C''',[sfoMultilineDeclareFunction]);
- end;
- procedure TTestGenerateSQL.TestTableFieldDefinition;
- Var
- F : TSQLTableFieldDef;
- begin
- F:=TSQLTableFieldDef.Create(Nil);
- F.FieldName:=CreateIdentifier('A');
- F.FieldType:=CreateTypeDefinition(sdtInteger,0);
- FTofree:=F;
- AssertSQL(F,'A INT');
- F.FieldType.Free;
- F.FieldType:=Nil;
- F.ComputedBy:=CreateBinaryExpression(CreateIdentifierExpression('B'),CreateLiteralExpression(CreateLiteral(1)));
- TSQLBinaryExpression(F.ComputedBy).Operation:=boAdd;
- FTofree:=F;
- AssertSQL(F,'A COMPUTED BY B + 1');
- end;
- procedure TTestGenerateSQL.TestCreateTable;
- Var
- T : TSQLCreateTableStatement;
- F : TSQLTableFieldDef;
- U : TSQLTableUniqueConstraintDef;
- begin
- F:=TSQLTableFieldDef.Create(Nil);
- F.FieldName:=CreateIdentifier('B');
- F.FieldType:=CreateTypeDefinition(sdtInteger,0);
- T:=TSQLCreateTableStatement.Create(Nil);
- T.ObjectName:=CreateIdentifier('A');
- FTofree:=T;
- T.FieldDefs.Add(F);
- AssertSQL(T,'CREATE TABLE A (B INT)');
- T.ExternalFileName:=CreateLiteral('/my/file');
- AssertSQL(T,'CREATE TABLE A EXTERNAL FILE ''/my/file'' (B INT)');
- T.ExternalFileName.Free;
- T.ExternalFileName:=Nil;
- F:=TSQLTableFieldDef.Create(Nil);
- F.FieldName:=CreateIdentifier('C');
- F.FieldType:=CreateTypeDefinition(sdtChar,5);
- T.FieldDefs.Add(F);
- FTofree:=T;
- AssertSQL(T,'CREATE TABLE A (B INT, C CHAR(5))');
- AssertSQL(T,'CREATE TABLE A ('+sLineBreak+'B INT,'+sLineBreak+'C CHAR(5))',[sfoOneFieldPerLine]);
- AssertSQL(T,'CREATE TABLE A ('+sLineBreak+' B INT,'+sLineBreak+' C CHAR(5))',[sfoOneFieldPerLine,sfoIndentFields]);
- U:=TSQLTableUniqueConstraintDef.Create(Nil);
- U.FieldList.Add(CreateIdentifier('B'));
- T.Constraints.Add(U);
- FTofree:=T;
- AssertSQL(T,'CREATE TABLE A (B INT, C CHAR(5), UNIQUE (B))');
- AssertSQL(T,'CREATE TABLE A ('+sLineBreak+'B INT,'+sLineBreak+'C CHAR(5),'+sLineBreak+'UNIQUE (B))',[sfoOneFieldPerLine]);
- AssertSQL(T,'CREATE TABLE A ('+sLineBreak+' B INT,'+sLineBreak+' C CHAR(5),'+sLineBreak+' UNIQUE (B))',[sfoOneFieldPerLine,sfoIndentFields]);
- U.ConstraintName:=CreateIdentifier('U_A');
- FTofree:=T;
- AssertSQL(T,'CREATE TABLE A (B INT, C CHAR(5), CONSTRAINT U_A UNIQUE (B))');
- end;
- procedure TTestGenerateSQL.TestDropFieldOperation;
- Var
- O : TSQLDropTableFieldOperation;
- begin
- O:=TSQLDropTableFieldOperation.Create(Nil);
- O.ObjectName:=CreateIdentifier('A');
- FTofree:=O;
- AssertSQL(O,'DROP A');
- end;
- procedure TTestGenerateSQL.TestDropConstraintOperation;
- Var
- O : TSQLDropTableConstraintOperation;
- begin
- O:=TSQLDropTableConstraintOperation.Create(Nil);
- O.ObjectName:=CreateIdentifier('A');
- FTofree:=O;
- AssertSQL(O,'DROP CONSTRAINT A');
- end;
- procedure TTestGenerateSQL.TestAlterFieldNameOperation;
- Var
- O : TSQLAlterTableFieldNameOperation;
- begin
- O:=TSQLAlterTableFieldNameOperation.Create(Nil);
- O.ObjectName:=CreateIdentifier('A');
- O.NewName:=CreateIdentifier('B');
- FTofree:=O;
- ASSERTSQl(O,'ALTER COLUMN A TO B');
- end;
- procedure TTestGenerateSQL.TestAlterFieldTypeOperation;
- Var
- O : TSQLAlterTableFieldTypeOperation;
- begin
- O:=TSQLAlterTableFieldTypeOperation.Create(Nil);
- O.ObjectName:=CreateIdentifier('A');
- O.NewType:=CreateTypeDefinition(sdtInteger,0);
- FTofree:=O;
- ASSERTSQl(O,'ALTER COLUMN A TYPE INT');
- end;
- procedure TTestGenerateSQL.TestAlterFieldPositionOperation;
- Var
- O : TSQLAlterTableFieldPositionOperation;
- begin
- O:=TSQLAlterTableFieldPositionOperation.Create(Nil);
- O.ObjectName:=CreateIdentifier('A');
- O.NewPosition:=2;
- FTofree:=O;
- ASSERTSQl(O,'ALTER COLUMN A POSITION 2');
- end;
- procedure TTestGenerateSQL.TestAddFieldOperation;
- Var
- O : TSQLAlterTableAddFieldOperation;
- F : TSQLTableFieldDef;
- begin
- F:=TSQLTableFieldDef.Create(Nil);
- FTofree:=F;
- F.FieldName:=CreateIdentifier('C');
- F.FieldType:=CreateTypeDefinition(sdtChar,5);
- O:=TSQLAlterTableAddFieldOperation.Create(Nil);
- FTofree:=O;
- O.Element:=F;
- AssertSQL(O,'ADD C CHAR(5)');
- end;
- procedure TTestGenerateSQL.TestAddConstraintOperation;
- Var
- O : TSQLAlterTableAddConstraintOperation;
- C : TSQLTableUniqueConstraintDef;
- begin
- C:=TSQLTableUniqueConstraintDef.Create(Nil);
- FTofree:=C;
- C.FieldList.Add(CreateIdentifier('C'));
- O:=TSQLAlterTableAddConstraintOperation.Create(Nil);
- FTofree:=O;
- O.Element:=C;
- AssertSQL(O,'ADD CONSTRAINT UNIQUE (C)');
- C.ConstraintName:=CreateIdentifier('D');
- AssertSQL(O,'ADD CONSTRAINT D UNIQUE (C)');
- end;
- procedure TTestGenerateSQL.TestAlterTable;
- Var
- A : TSQLAlterTableStatement;
- DF : TSQLDropTableFieldOperation;
- AC : TSQLAlterTableAddConstraintOperation;
- C : TSQLTableUniqueConstraintDef;
- begin
- A:=TSQLAlterTableStatement.Create(Nil);
- A.ObjectName:=CreateIdentifier('A');
- DF:=TSQLDropTableFieldOperation.Create(Nil);
- DF.ObjectName:=CreateIdentifier('B');
- A.Operations.Add(DF);
- FTofree:=A;
- AssertSQL(A,'ALTER TABLE A DROP B');
- AssertSQL(A,'ALTER TABLE A'+sLineBreak+'DROP B',[sfoOneFieldPerLine]);
- AssertSQL(A,'ALTER TABLE A'+sLineBreak+' DROP B',[sfoOneFieldPerLine,sfoIndentFields]);
- C:=TSQLTableUniqueConstraintDef.Create(Nil);
- FTofree:=C;
- C.FieldList.Add(CreateIdentifier('C'));
- AC:=TSQLAlterTableAddConstraintOperation.Create(Nil);
- AC.Element:=C;
- A.Operations.Add(AC);
- FTofree:=A;
- AssertSQL(A,'ALTER TABLE A DROP B, ADD CONSTRAINT UNIQUE (C)');
- end;
- procedure TTestGenerateSQL.TestCreateView;
- Var
- V : TSQLCreateViewStatement;
- begin
- V:=TSQLCreateViewStatement.Create(Nil);
- V.ObjectName:=CreateIdentifier('A');
- V.Select:=CreateSelect(CreateIdentifierExpression('B'),'C');
- FToFree:=V;
- AssertSQL(V,'CREATE VIEW A AS SELECT B FROM C');
- V.Fields.Add(CreateIdentifier('D'));
- FToFree:=V;
- AssertSQL(V,'CREATE VIEW A (D) AS SELECT B FROM C');
- end;
- procedure TTestGenerateSQL.TestDatabaseFileInfo;
- Var
- F : TSQLDatabaseFileInfo;
- begin
- F:=TSQLDatabaseFileInfo.Create(Nil);
- F.FileName:='/my/file';
- FTofree:=F;
- AssertSQL(F,'FILE ''/my/file''');
- F.Length:=2;
- AssertSQL(F,'FILE ''/my/file'' LENGTH 2 PAGES');
- F.Length:=0;
- F.StartPage:=3;
- AssertSQL(F,'FILE ''/my/file'' STARTING AT 3');
- end;
- procedure TTestGenerateSQL.TestCreateDatabase;
- Var
- D : TSQLCreateDatabaseStatement;
- F : TSQLDatabaseFileInfo;
- begin
- D:=TSQLCreateDatabaseStatement.Create(Nil);
- D.FileName:='/my/file';
- FTofree:=D;
- AssertSQL(D,'CREATE DATABASE ''/my/file''');
- D.UseSchema:=true;
- AssertSQL(D,'CREATE SCHEMA ''/my/file''');
- D.UseSchema:=False;
- D.Password:='Secret';
- AssertSQL(D,'CREATE DATABASE ''/my/file''');
- D.UserName:='me';
- AssertSQL(D,'CREATE DATABASE ''/my/file'' USER ''me'' PASSWORD ''Secret''');
- AssertSQL(D,'CREATE DATABASE ''/my/file'''+SlineBreak+' USER ''me'' PASSWORD ''Secret''',[sfoMultilineCreateDatabase]);
- D.PageSize:=2048;
- AssertSQL(D,'CREATE DATABASE ''/my/file'' USER ''me'' PASSWORD ''Secret'' PAGE_SIZE 2048');
- AssertSQL(D,'CREATE DATABASE ''/my/file'''+SlineBreak+' USER ''me'' PASSWORD ''Secret'''+SlineBreak+' PAGE_SIZE 2048',[sfoMultilineCreateDatabase]);
- D.Length:=1000;
- AssertSQL(D,'CREATE DATABASE ''/my/file'' USER ''me'' PASSWORD ''Secret'' PAGE_SIZE 2048 LENGTH 1000');
- AssertSQL(D,'CREATE DATABASE ''/my/file'''+SlineBreak+' USER ''me'' PASSWORD ''Secret'''+SlineBreak+' PAGE_SIZE 2048'+SlineBreak+' LENGTH 1000',[sfoMultilineCreateDatabase]);
- D.CharSet:=CreateIdentifier('UTF8');
- FToFree:=D;
- AssertSQL(D,'CREATE DATABASE ''/my/file'' USER ''me'' PASSWORD ''Secret'' PAGE_SIZE 2048 LENGTH 1000 DEFAULT CHARACTER SET UTF8');
- AssertSQL(D,'CREATE DATABASE ''/my/file'''+SlineBreak+' USER ''me'' PASSWORD ''Secret'''+SlineBreak+' PAGE_SIZE 2048'+SlineBreak+' LENGTH 1000'+SlineBreak+' DEFAULT CHARACTER SET UTF8',[sfoMultilineCreateDatabase]);
- F:=TSQLDatabaseFileInfo.Create(Nil);
- FToFree:=D;
- F.FileName:='/my/file2';
- F.StartPage:=3;
- D.SecondaryFiles.Add(F);
- AssertSQL(D,'CREATE DATABASE ''/my/file'' USER ''me'' PASSWORD ''Secret'' PAGE_SIZE 2048 LENGTH 1000 DEFAULT CHARACTER SET UTF8 FILE ''/my/file2'' STARTING AT 3');
- AssertSQL(D,'CREATE DATABASE ''/my/file'''+SlineBreak+' USER ''me'' PASSWORD ''Secret'''+SlineBreak+' PAGE_SIZE 2048'+SlineBreak+' LENGTH 1000'+SlineBreak+' DEFAULT CHARACTER SET UTF8'+SlineBreak+' FILE ''/my/file2'' STARTING AT 3',[sfoMultilineCreateDatabase]);
- F:=TSQLDatabaseFileInfo.Create(Nil);
- FToFree:=D;
- F.FileName:='/my/file3';
- F.StartPage:=4;
- D.SecondaryFiles.Add(F);
- AssertSQL(D,'CREATE DATABASE ''/my/file'' USER ''me'' PASSWORD ''Secret'' PAGE_SIZE 2048 LENGTH 1000 DEFAULT CHARACTER SET UTF8 FILE ''/my/file2'' STARTING AT 3 FILE ''/my/file3'' STARTING AT 4');
- AssertSQL(D,'CREATE DATABASE ''/my/file'''+SlineBreak+' USER ''me'' PASSWORD ''Secret'''+SlineBreak+' PAGE_SIZE 2048'+SlineBreak+' LENGTH 1000'+SlineBreak+' DEFAULT CHARACTER SET UTF8'+SlineBreak+' FILE ''/my/file2'' STARTING AT 3'+SlineBreak+' FILE ''/my/file3'' STARTING AT 4',[sfoMultilineCreateDatabase]);
- end;
- procedure TTestGenerateSQL.TestAlterDatabase;
- Var
- D : TSQLAlterDatabaseStatement;
- F : TSQLDatabaseFileInfo;
- begin
- D:=TSQLAlterDatabaseStatement.Create(Nil);
- F:=TSQLDatabaseFileInfo.Create(Nil);
- FToFree:=D;
- F.FileName:='/my/file2';
- F.StartPage:=3;
- D.Operations.Add(F);
- FToFree:=D;
- AssertSQL(D,'ALTER DATABASE ADD FILE ''/my/file2'' STARTING AT 3');
- AssertSQL(D,'ALTER DATABASE ADD'+SlineBreak+' FILE ''/my/file2'' STARTING AT 3',[sfoMultilineCreateDatabase]);
- D.UseSchema:=True;
- AssertSQL(D,'ALTER SCHEMA ADD FILE ''/my/file2'' STARTING AT 3');
- D.UseSchema:=False;
- F:=TSQLDatabaseFileInfo.Create(Nil);
- F.FileName:='/my/file3';
- F.StartPage:=4;
- D.Operations.Add(F);
- FToFree:=D;
- AssertSQL(D,'ALTER DATABASE ADD FILE ''/my/file2'' STARTING AT 3 FILE ''/my/file3'' STARTING AT 4');
- AssertSQL(D,'ALTER DATABASE ADD'+SlineBreak+' FILE ''/my/file2'' STARTING AT 3'+SlineBreak+' FILE ''/my/file3'' STARTING AT 4',[sfoMultilineCreateDatabase]);
- end;
- procedure TTestGenerateSQL.TestCreateShadow;
- Var
- S : TSQLCreateShadowStatement;
- F : TSQLDatabaseFileInfo;
- begin
- S:=TSQLCreateShadowStatement.Create(Nil);
- S.Number:=1;
- S.FileName:='/my/file';
- FTofree:=S;
- AssertSQL(S,'CREATE SHADOW 1 ''/my/file''');
- S.Manual:=True;
- AssertSQL(S,'CREATE SHADOW 1 MANUAL ''/my/file''');
- S.Conditional:=True;
- AssertSQL(S,'CREATE SHADOW 1 MANUAL CONDITIONAL ''/my/file''');
- S.Length:=4;
- AssertSQL(S,'CREATE SHADOW 1 MANUAL CONDITIONAL ''/my/file'' LENGTH 4 PAGES');
- F:=TSQLDatabaseFileInfo.Create(Nil);
- FTofree:=S;
- F.FileName:='/my/file2';
- F.StartPage:=4;
- S.SecondaryFiles.Add(F);
- AssertSQL(S,'CREATE SHADOW 1 MANUAL CONDITIONAL ''/my/file'' LENGTH 4 PAGES FILE ''/my/file2'' STARTING AT 4');
- AssertSQL(S,'CREATE SHADOW 1 MANUAL CONDITIONAL ''/my/file'' LENGTH 4 PAGES'+sLineBreak+' FILE ''/my/file2'' STARTING AT 4',[sfoMultilineCreateShadow]);
- end;
- procedure TTestGenerateSQL.TestSuspend;
- Var
- S : TSQLSuspendStatement;
- begin
- S:=TSQLSuspendStatement.Create(Nil);
- FToFree:=S;
- AssertSQL(S,'SUSPEND');
- end;
- procedure TTestGenerateSQL.TestExit;
- Var
- S : TSQLExitStatement;
- begin
- S:=TSQLExitStatement.Create(Nil);
- FToFree:=S;
- AssertSQL(S,'EXIT');
- end;
- procedure TTestGenerateSQL.TestBlock;
- Var
- B,B2 : TSQLStatementBlock;
- S : TSQLExitStatement;
- L : TSQLSelectStatement;
- begin
- B:=TSQLStatementBlock.Create(Nil);
- FtoFree:=B;
- B.Statements.Add(TSQLExitStatement.Create(Nil));
- FtoFree:=B;
- AssertSQL(B,'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END');
- B.Statements.Add(TSQLSuspendStatement.Create(Nil));
- FtoFree:=B;
- AssertSQL(B,'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+' SUSPEND;'+sLineBreak+'END');
- B.Statements.Clear;
- L:=CreateSelect(CreateIdentifierExpression('A'),'B');
- FtoFree:=B;
- B.Statements.Add(L);
- AssertSQL(B,'BEGIN'+sLineBreak+' SELECT'+sLineBreak+' A'+sLineBreak+' FROM'+sLineBreak+' B;'+sLineBreak+'END',[sfoOneFieldPerLine,sfoOneTablePerLine]);
- AssertSQL(B,'BEGIN'+sLineBreak+' SELECT'+sLineBreak+' A'+sLineBreak+' FROM'+sLineBreak+' B;'+sLineBreak+'END',[sfoOneFieldPerLine,sfoIndentFields,sfoOneTablePerLine,sfoIndentTables]);
- B.Statements.Clear;
- B2:=TSQLStatementBlock.Create(Nil);
- FtoFree:=B;
- B2.Statements.Add(TSQLExitStatement.Create(Nil));
- FtoFree:=B;
- B.Statements.Add(B2);
- AssertSQL(B,'BEGIN'+sLineBreak+' BEGIN'+sLineBreak+' EXIT;'+sLineBreak+' END'+sLineBreak+'END');
- end;
- procedure TTestGenerateSQL.TestAssignment;
- var
- A : TSQLAssignStatement;
- begin
- A:=TSQLAssignStatement.Create(Nil);
- A.Variable:=CreateIdentifier('A');
- A.Expression:=CreateIdentifierExpression('B');
- FToFree:=A;
- AssertSQL(A,'A = B');
- end;
- procedure TTestGenerateSQL.TestIf;
- Var
- I : TSQLIfStatement;
- C : TSQLBinaryExpression;
- begin
- I:=TSQLIfStatement.Create(Nil);
- C:=CreateBinaryExpression(CreateIdentifierExpression('A'),CreateIdentifierExpression('B'));
- C.Operation:=boEQ;
- I.Condition:=C;
- I.TrueBranch:=TSQLSuspendStatement.Create(Nil);
- FToFree:=I;
- AssertSQL(I,'IF (A = B) THEN'+sLineBreak+' SUSPEND');
- I.FalseBranch:=TSQLExitStatement.Create(Nil);
- AssertSQL(I,'IF (A = B) THEN'+sLineBreak+' SUSPEND'+sLineBreak+'ELSE'+sLineBreak+' EXIT');
- end;
- procedure TTestGenerateSQL.TestFor;
- Var
- F : TSQLForStatement;
- begin
- F:=TSQLForStatement.Create(Nil);
- F.Select:=CreateSelect(CreateIdentifierExpression('A'),'B');
- F.FieldList.Add(CreateIdentifier('ID'));
- F.Statement:=TSQLSuspendStatement.Create(Nil);
- AssertSQL(F,'FOR SELECT A FROM B'+sLineBreak+'INTO'+sLineBreak+':ID'+sLineBreak+'DO'+sLineBreak+' SUSPEND',[sfoIndentFields]);
- F.Select.Fields.Add(CreateIdentifier('C'));
- F.FieldList.Add(CreateIdentifier('ID2'));
- AssertSQL(F,'FOR SELECT A, C FROM B'+sLineBreak+'INTO'+sLineBreak+':ID, :ID2'+sLineBreak+'DO'+sLineBreak+' SUSPEND');
- AssertSQL(F,'FOR SELECT'+sLineBreak+'A,'+sLineBreak+'C'+sLineBreak+'FROM B'+sLineBreak+'INTO'+sLineBreak+':ID,'+sLineBreak+':ID2'+sLineBreak+'DO'+sLineBreak+' SUSPEND',[sfoOneFieldPerLine]);
- end;
- procedure TTestGenerateSQL.TestWhile;
- Var
- W : TSQLWhileStatement;
- C : TSQLBinaryExpression;
- A : TSQLAssignStatement;
- begin
- W:=TSQLWhileStatement.Create(Nil);
- C:=CreateBinaryExpression(CreateIdentifierExpression('A'),CreateIdentifierExpression('B'));
- C.Operation:=boLT;
- W.Condition:=C;
- FToFree:=W;
- A:=TSQLAssignStatement.Create(Nil);
- A.Variable:=CreateIdentifier('A');
- C:=CreateBinaryExpression(CreateIdentifierExpression('A'),CreateLiteralExpression(CreateLiteral(1)));
- C.Operation:=boAdd;
- A.Expression:=C;
- W.Statement:=A;
- FToFree:=W;
- AssertSQL(W,'WHILE (A < B) DO'+slineBreak+' A = A + 1');
- end;
- procedure TTestGenerateSQL.TestWhenSQLError;
- Var
- S : TSQLWhenSQLError;
- begin
- S:=TSQLWhenSQLError.Create(Nil);
- S.ErrorCode:=2;
- FToFree:=S;
- AssertSQL(S,'SQLCODE 2');
- end;
- procedure TTestGenerateSQL.TestWhenGDSError;
- Var
- G : TSQLWhenGDSError;
- begin
- G:=TSQLWhenGDSError.Create(Nil);
- G.GDSErrorNumber:=2;
- FToFree:=G;
- AssertSQL(G,'GDSCODE 2');
- end;
- procedure TTestGenerateSQL.TestWhenException;
- Var
- E : TSQLWhenException;
- begin
- E:=TSQLWhenException.Create(Nil);
- E.ExceptionName:=CreateIdentifier('E');
- FToFree:=E;
- AssertSQL(E,'EXCEPTION E');
- end;
- procedure TTestGenerateSQL.TestWhen;
- Var
- W : TSQLWhenStatement;
- E : TSQLWhenException;
- G : TSQLWhenGDSError;
- S : TSQLWhenSQLError;
- begin
- W:=TSQLWhenStatement.Create(Nil);
- FToFree:=W;
- W.Statement:=TSQLExitStatement.Create(Nil);
- FToFree:=W;
- W.AnyError:=True;
- AssertSQL(W,'WHEN ANY DO'+sLineBreak+' EXIT');
- W.AnyError:=False;
- E:=TSQLWhenException.Create(Nil);
- E.ExceptionName:=CreateIdentifier('E');
- W.Errors.Add(E);
- AssertSQL(W,'WHEN EXCEPTION E DO'+sLineBreak+' EXIT');
- W.Errors.Extract(E);
- S:=TSQLWhenSQLError.Create(Nil);
- S.ErrorCode:=2;
- W.Errors.Add(S);
- AssertSQL(W,'WHEN SQLCODE 2 DO'+sLineBreak+' EXIT');
- W.Errors.Extract(S);
- G:=TSQLWhenGDSError.Create(Nil);
- G.GDSErrorNumber:=3;
- W.Errors.Add(G);
- AssertSQL(W,'WHEN GDSCODE 3 DO'+sLineBreak+' EXIT');
- W.Errors.Add(S);
- AssertSQL(W,'WHEN GDSCODE 3 , SQLCODE 2 DO'+sLineBreak+' EXIT');
- W.Errors.Add(E);
- AssertSQL(W,'WHEN GDSCODE 3 , SQLCODE 2 , EXCEPTION E DO'+sLineBreak+' EXIT');
- end;
- procedure TTestGenerateSQL.TestException;
- Var
- E : TSQLExceptionStatement;
- begin
- E:=TSQLExceptionStatement.Create(Nil);
- E.ExceptionName:=CreateIdentifier('E');
- FToFree:=E;
- AssertSQL(E,'EXCEPTION E');
- end;
- procedure TTestGenerateSQL.TestPostEvent;
- Var
- P : TSQLPostEventStatement;
- begin
- P:=TSQLPostEventStatement.Create(nil);
- P.ColName:=CreateIdentifier('E');
- FTofree:=P;
- AssertSQL(P,'POST_EVENT E');
- P.ColName.Free;
- P.ColName:=Nil;
- P.EventName:='E';
- AssertSQL(P,'POST_EVENT ''E''');
- end;
- procedure TTestGenerateSQL.TestTriggerProcedure;
- Var
- S : TSQLCreateOrAlterProcedureTriggerStatement;
- P : TSQLProcedureParamDef;
- begin
- S:=TSQLCreateOrAlterProcedureTriggerStatement.Create(Nil);
- FToFree:=S;
- AssertSQL(S,'BEGIN'+sLineBreak+'END');
- S.Statements.Add(TSQLExitStatement.Create(Nil));
- AssertSQL(S,'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- P:=TSQLProcedureParamDef.Create(Nil);
- P.ParamName:=CreateIdentifier('A');
- P.ParamType:=CreateTypeDefinition(sdtInteger,0);
- FToFree:=S;
- S.LocalVariables.Add(P);
- AssertSQL(S,'DECLARE VARIABLE A INT;'+sLineBreak+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,'DECLARE VARIABLE A INT;'+sLineBreak+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- P:=TSQLProcedureParamDef.Create(Nil);
- P.ParamName:=CreateIdentifier('B');
- P.ParamType:=CreateTypeDefinition(sdtChar,5);
- FToFree:=S;
- S.LocalVariables.Add(P);
- AssertSQL(S,'DECLARE VARIABLE A INT;'+sLineBreak+'DECLARE VARIABLE B CHAR(5);'+sLineBreak+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,'DECLARE VARIABLE A INT;'+sLineBreak+'DECLARE VARIABLE B CHAR(5);'+sLineBreak+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- end;
- procedure TTestGenerateSQL.DoTestAlterCreateProcedure(S : TSQLAlterCreateProcedureStatement; PHEAD : String);
- Var
- P : TSQLProcedureParamDef;
- H : TSQLStringType;
- begin
- PHead:=PHead+' P';
- FToFree:=S;
- S.ObjectName:=CreateIdentifier('P');
- H:=PHEAD+sLineBreak+'AS'+sLineBreak;
- AssertSQL(S,H+'BEGIN'+sLineBreak+'END');
- S.Statements.Add(TSQLExitStatement.Create(Nil));
- AssertSQL(S,H+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,H+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- P:=TSQLProcedureParamDef.Create(Nil);
- P.ParamName:=CreateIdentifier('I');
- P.ParamType:=CreateTypeDefinition(sdtInteger,0);
- FToFree:=S;
- S.InputVariables.Add(P);
- H:=PHEAD+' (I INT)'+sLineBreak+'AS'+sLineBreak;
- AssertSQL(S,H+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,H+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- P:=TSQLProcedureParamDef.Create(Nil);
- P.ParamName:=CreateIdentifier('J');
- P.ParamType:=CreateTypeDefinition(sdtChar,5);
- FToFree:=S;
- S.InputVariables.Add(P);
- H:=PHEAD+' (I INT , J CHAR(5))'+sLineBreak+'AS'+sLineBreak;
- AssertSQL(S,H+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,H+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- P:=TSQLProcedureParamDef.Create(Nil);
- P.ParamName:=CreateIdentifier('R');
- P.ParamType:=CreateTypeDefinition(sdtInteger,0);
- FToFree:=S;
- S.OutputVariables.Add(P);
- H:=PHEAD+' (I INT , J CHAR(5))'+sLineBreak+'RETURNS (R INT)'+sLineBreak+'AS'+sLineBreak;
- AssertSQL(S,H+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,H+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- P:=TSQLProcedureParamDef.Create(Nil);
- P.ParamName:=CreateIdentifier('S');
- P.ParamType:=CreateTypeDefinition(sdtChar,5);
- FToFree:=S;
- S.OutputVariables.Add(P);
- H:=PHEAD+' (I INT , J CHAR(5))'+sLineBreak+'RETURNS (R INT , S CHAR(5))'+sLineBreak+'AS'+sLineBreak;
- AssertSQL(S,H+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,H+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- P:=TSQLProcedureParamDef.Create(Nil);
- P.ParamName:=CreateIdentifier('A');
- P.ParamType:=CreateTypeDefinition(sdtInteger,0);
- FToFree:=S;
- S.LocalVariables.Add(P);
- AssertSQL(S,H+'DECLARE VARIABLE A INT;'+sLineBreak+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,H+'DECLARE VARIABLE A INT;'+sLineBreak+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- P:=TSQLProcedureParamDef.Create(Nil);
- P.ParamName:=CreateIdentifier('B');
- P.ParamType:=CreateTypeDefinition(sdtChar,5);
- FToFree:=S;
- S.LocalVariables.Add(P);
- AssertSQL(S,H+'DECLARE VARIABLE A INT;'+sLineBreak+'DECLARE VARIABLE B CHAR(5);'+sLineBreak+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,H+'DECLARE VARIABLE A INT;'+sLineBreak+'DECLARE VARIABLE B CHAR(5);'+sLineBreak+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- end;
- procedure TTestGenerateSQL.TestCreateProcedure;
- begin
- DoTestAlterCreateProcedure(TSQLCreateProcedureStatement.Create(Nil),'CREATE PROCEDURE');
- end;
- procedure TTestGenerateSQL.TestAlterProcedure;
- begin
- DoTestAlterCreateProcedure(TSQLAlterProcedureStatement.Create(Nil),'ALTER PROCEDURE');
- end;
- procedure TTestGenerateSQL.DoTestAlterCreateTrigger(
- S: TSQLAlterCreateTriggerStatement; PHEAD: String);
- Var
- P : TSQLProcedureParamDef;
- H : TSQLStringType;
- begin
- FToFree:=S;
- S.ObjectName:=CreateIdentifier('TR');
- S.TableName:=CreateIdentifier('TA');
- S.Position:=1;
- S.Moment:=tmBefore;
- S.Operations:=[toDelete];
- H:=PHEAD+sLineBreak+'BEFORE DELETE'+sLineBreak+'POSITION 1'+sLineBreak+'AS'+sLineBreak;
- AssertSQL(S,H+'BEGIN'+sLineBreak+'END');
- S.Moment:=tmAfter;
- S.Operations:=[toDelete];
- H:=PHEAD+sLineBreak+'AFTER DELETE'+sLineBreak+'POSITION 1'+sLineBreak+'AS'+sLineBreak;
- AssertSQL(S,H+'BEGIN'+sLineBreak+'END');
- S.Operations:=[toUPDATE];
- H:=PHEAD+sLineBreak+'AFTER UPDATE'+sLineBreak+'POSITION 1'+sLineBreak+'AS'+sLineBreak;
- AssertSQL(S,H+'BEGIN'+sLineBreak+'END');
- S.Operations:=[toUPDATE,toDelete];
- H:=PHEAD+sLineBreak+'AFTER DELETE OR UPDATE'+sLineBreak+'POSITION 1'+sLineBreak+'AS'+sLineBreak;
- AssertSQL(S,H+'BEGIN'+sLineBreak+'END');
- S.Operations:=[toInsert];
- S.State:=tsActive;
- H:=PHEAD+sLineBreak+'ACTIVE'+sLineBreak+'AFTER INSERT'+sLineBreak+'POSITION 1'+sLineBreak+'AS'+sLineBreak;
- AssertSQL(S,H+'BEGIN'+sLineBreak+'END');
- S.State:=tsInActive;
- H:=PHEAD+sLineBreak+'INACTIVE'+sLineBreak+'AFTER INSERT'+sLineBreak+'POSITION 1'+sLineBreak+'AS'+sLineBreak;
- AssertSQL(S,H+'BEGIN'+sLineBreak+'END');
- S.Statements.Add(TSQLExitStatement.Create(Nil));
- AssertSQL(S,H+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,H+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- P:=TSQLProcedureParamDef.Create(Nil);
- P.ParamName:=CreateIdentifier('A');
- P.ParamType:=CreateTypeDefinition(sdtInteger,0);
- FToFree:=S;
- S.LocalVariables.Add(P);
- AssertSQL(S,H+'DECLARE VARIABLE A INT;'+sLineBreak+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,H+'DECLARE VARIABLE A INT;'+sLineBreak+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- P:=TSQLProcedureParamDef.Create(Nil);
- P.ParamName:=CreateIdentifier('B');
- P.ParamType:=CreateTypeDefinition(sdtChar,5);
- FToFree:=S;
- S.LocalVariables.Add(P);
- AssertSQL(S,H+'DECLARE VARIABLE A INT;'+sLineBreak+'DECLARE VARIABLE B CHAR(5);'+sLineBreak+'BEGIN'+sLineBreak+'EXIT;'+sLineBreak+'END');
- AssertSQL(S,H+'DECLARE VARIABLE A INT;'+sLineBreak+'DECLARE VARIABLE B CHAR(5);'+sLineBreak+'BEGIN'+sLineBreak+' EXIT;'+sLineBreak+'END',[sfoIndentProcedureBlock]);
- end;
- procedure TTestGenerateSQL.TestCreateTrigger;
- begin
- DoTestAlterCreateTrigger(TSQLCreateTriggerStatement.Create(Nil),'CREATE TRIGGER TR FOR TA');
- end;
- procedure TTestGenerateSQL.TestAlterTrigger;
- begin
- DoTestAlterCreateTrigger(TSQLAlterTriggerStatement.Create(Nil),'ALTER TRIGGER TR');
- end;
- procedure TTestGenerateSQL.DoTestDropStatement(AClass : TSQLDropStatementClass; Const AObjectName : String);
- Var
- D : TSQLDropStatement;
- begin
- D:=AClass.Create(Nil);
- D.ObjectName:=CreateIdentifier('D');
- FToFree:=Nil;
- Try
- AssertSQL(D,'DROP '+AObjectName+' D');
- AssertSQL(D,'drop '+lowercase(AObjectName)+' D',[sfoLowerCaseKeyWord]);
- Finally
- D.Free;
- end;
- end;
- procedure TTestGenerateSQL.TestDropStatement;
- begin
- DoTestDropStatement(TSQLDropTableStatement,'TABLE');
- DoTestDropStatement(TSQLDropIndexStatement,'INDEX');
- DoTestDropStatement(TSQLDropViewStatement,'VIEW');
- DoTestDropStatement(TSQLDropProcedureStatement,'PROCEDURE');
- DoTestDropStatement(TSQLDropDomainStatement,'DOMAIN');
- DoTestDropStatement(TSQLDropGeneratorStatement,'GENERATOR');
- DoTestDropStatement(TSQLDropTriggerStatement,'TRIGGER');
- DoTestDropStatement(TSQLDropExceptionStatement,'EXCEPTION');
- DoTestDropStatement(TSQLDropDatabaseStatement,'DATABASE');
- DoTestDropStatement(TSQLDropRoleStatement,'ROLE');
- DoTestDropStatement(TSQLDropExternalFunctionStatement,'EXTERNAL FUNCTION');
- DoTestDropStatement(TSQLDropShadowStatement,'SHADOW');
- end;
- procedure TTestGenerateSQL.TestConnect;
- Const
- Base = 'CONNECT ''db''';
- Var
- C : TSQLConnectStatement;
- begin
- C:=TSQLConnectStatement.Create(Nil);
- FToFree:=C;
- C.DatabaseName:='db';
- AssertSQL(C,Base);
- C.UserName:='u';
- AssertSQL(C,Base+' USER ''u''');
- C.Password:='p';
- AssertSQL(C,Base+' USER ''u'' PASSWORD ''p''');
- C.UserName:='';
- AssertSQL(C,Base+' PASSWORD ''p''');
- C.Password:='';
- C.Cache:=2048;
- AssertSQL(C,Base+' CACHE 2048');
- C.Cache:=0;
- C.Role:='r';
- AssertSQL(C,Base+' ROLE ''r''');
- end;
- procedure TTestGenerateSQL.TestExtract;
- Var
- C : TSQLExtractExpression;
- begin
- AssertEquals(ExtractElementNames[eeYear],'YEAR');
- AssertEquals(ExtractElementNames[eeMonth],'MONTH');
- AssertEquals(ExtractElementNames[eeDay],'DAY');
- AssertEquals(ExtractElementNames[eeHour],'HOUR');
- AssertEquals(ExtractElementNames[eeMinute],'MINUTE');
- AssertEquals(ExtractElementNames[eeSecond],'SECOND');
- AssertEquals(ExtractElementNames[eeWeekDay],'WEEKDAY');
- AssertEquals(ExtractElementNames[eeYearDay],'YEARDAY');
- C:=TSQLExtractExpression.Create(Nil);
- C.Value:=CreateIdentifierExpression('A');
- C.Element:=eeYear;
- AssertSQL(C,'EXTRACT(YEAR FROM A)');
- C.Element:=eeMonth;
- AssertSQL(C,'EXTRACT(MONTH FROM A)');
- C.Element:=eeDay;
- AssertSQL(C,'EXTRACT(DAY FROM A)');
- C.Element:=eeHour;
- AssertSQL(C,'EXTRACT(HOUR FROM A)');
- C.Element:=eeMinute;
- AssertSQL(C,'EXTRACT(MINUTE FROM A)');
- C.Element:=eeSecond;
- AssertSQL(C,'EXTRACT(SECOND FROM A)');
- C.Element:=eeWeekday;
- AssertSQL(C,'EXTRACT(WEEKDAY FROM A)');
- C.Element:=eeYearday;
- AssertSQL(C,'EXTRACT(YEARDAY FROM A)');
- end;
- procedure TTestGenerateSQL.TestParamExpression;
- Var
- P : TSQLParameterExpression;
- begin
- P:=TSQLParameterExpression.Create(Nil);
- P.Identifier:=CreateIdentifier('P');
- FTofree:=P;
- AssertSQL(P,':P');
- end;
- procedure TTestGenerateSQL.TestGrantTable;
- Var
- G : TSQLTableGrantStatement;
- U : TSQLUserGrantee;
- PU : TSQLColumnPrivilege;
- PG : TSQLProcedureGrantee;
- begin
- G:=TSQLTableGrantStatement.Create(Nil);
- G.TableName:=CreateIdentifier('A');
- FtoFree:=G;
- G.Privileges.Add(TSQLSelectPrivilege.Create(Nil));
- G.Grantees.add(CreateGrantee('B'));
- FtoFree:=G;
- AssertSQl(G,'GRANT SELECT ON A TO B');
- G.Grantees.add(CreateGrantee('C'));
- FtoFree:=G;
- AssertSQl(G,'GRANT SELECT ON A TO B , C');
- G.Privileges.Clear;
- G.Privileges.Add(TSQLUPdatePrivilege.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'GRANT UPDATE ON A TO B , C');
- G.Privileges.Clear;
- G.Privileges.Add(TSQLDeletePrivilege.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'GRANT DELETE ON A TO B , C');
- G.Privileges.Clear;
- G.Privileges.Add(TSQLINSERTPrivilege.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'GRANT INSERT ON A TO B , C');
- G.Privileges.Clear;
- G.Privileges.Add(TSQLReferencePrivilege.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'GRANT REFERENCES ON A TO B , C');
- G.Privileges.Clear;
- G.Privileges.Add(TSQLAllPrivilege.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'GRANT ALL PRIVILEGES ON A TO B , C');
- G.GrantOption:=True;
- AssertSQl(G,'GRANT ALL PRIVILEGES ON A TO B , C WITH GRANT OPTION');
- G.GrantOption:=False;
- G.Privileges.Clear;
- G.Privileges.Add(TSQLSelectPrivilege.Create(Nil));
- G.Grantees.Clear;
- G.Grantees.Add(TSQLPublicGrantee.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'GRANT SELECT ON A TO PUBLIC');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLProcedureGrantee));
- AssertSQl(G,'GRANT SELECT ON A TO PROCEDURE B');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLViewGrantee));
- AssertSQl(G,'GRANT SELECT ON A TO VIEW B');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLTriggerGrantee));
- AssertSQl(G,'GRANT SELECT ON A TO TRIGGER B');
- FtoFree:=G;
- G.Privileges.Clear;
- Pu:=TSQLUPdatePrivilege.Create(Nil);
- PU.Columns:=TSQLElementList.Create(True);
- PU.Columns.Add(CreateIdentifier('C'));
- G.Privileges.Add(PU);
- FtoFree:=G;
- AssertSQl(G,'GRANT UPDATE (C) ON A TO TRIGGER B');
- PU.Columns.Add(CreateIdentifier('D'));
- FtoFree:=G;
- AssertSQl(G,'GRANT UPDATE (C , D) ON A TO TRIGGER B');
- G.Privileges.Clear;
- Pu:=TSQLReferencePrivilege.Create(Nil);
- PU.Columns:=TSQLElementList.Create(True);
- PU.Columns.Add(CreateIdentifier('C'));
- G.Privileges.Add(PU);
- FtoFree:=G;
- AssertSQl(G,'GRANT REFERENCES (C) ON A TO TRIGGER B');
- PU.Columns.Add(CreateIdentifier('D'));
- FtoFree:=G;
- AssertSQl(G,'GRANT REFERENCES (C , D) ON A TO TRIGGER B');
- end;
- procedure TTestGenerateSQL.TestGrantProcedure;
- Var
- G : TSQLProcedureGrantStatement;
- U : TSQLUserGrantee;
- PU : TSQLColumnPrivilege;
- PG : TSQLProcedureGrantee;
- begin
- G:=TSQLProcedureGrantStatement.Create(Nil);
- G.ProcedureName:=CreateIdentifier('A');
- FtoFree:=G;
- G.Grantees.add(CreateGrantee('B'));
- FtoFree:=G;
- AssertSQL(G,'GRANT EXECUTE ON PROCEDURE A TO B');
- G.Grantees.add(CreateGrantee('C'));
- FtoFree:=G;
- AssertSQL(G,'GRANT EXECUTE ON PROCEDURE A TO B , C');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLTriggerGrantee));
- FtoFree:=G;
- AssertSQL(G,'GRANT EXECUTE ON PROCEDURE A TO TRIGGER B');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLProcedureGrantee));
- FtoFree:=G;
- AssertSQL(G,'GRANT EXECUTE ON PROCEDURE A TO PROCEDURE B');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLViewGrantee));
- FtoFree:=G;
- AssertSQL(G,'GRANT EXECUTE ON PROCEDURE A TO VIEW B');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLPublicGrantee));
- FtoFree:=G;
- AssertSQL(G,'GRANT EXECUTE ON PROCEDURE A TO PUBLIC');
- end;
- procedure TTestGenerateSQL.TestGrantRole;
- Var
- G : TSQLRoleGrantStatement;
- U : TSQLUserGrantee;
- begin
- G:=TSQLRoleGrantStatement.Create(Nil);
- G.Roles.Add(CreateIdentifier('A'));
- FtoFree:=G;
- G.Grantees.add(CreateGrantee('B'));
- FtoFree:=G;
- AssertSQL(G,'GRANT A TO B');
- G.Roles.Add(CreateIdentifier('C'));
- FtoFree:=G;
- AssertSQL(G,'GRANT A , C TO B');
- G.Grantees.add(CreateGrantee('D'));
- FtoFree:=G;
- AssertSQL(G,'GRANT A , C TO B , D');
- G.AdminOption:=True;
- AssertSQL(G,'GRANT A , C TO B , D WITH ADMIN OPTION');
- end;
- procedure TTestGenerateSQL.TestRevokeTable;
- Var
- G : TSQLTableRevokeStatement;
- U : TSQLUserGrantee;
- PU : TSQLColumnPrivilege;
- PG : TSQLProcedureGrantee;
- begin
- G:=TSQLTableRevokeStatement.Create(Nil);
- G.TableName:=CreateIdentifier('A');
- FtoFree:=G;
- G.Privileges.Add(TSQLSelectPrivilege.Create(Nil));
- G.Grantees.add(CreateGrantee('B'));
- FtoFree:=G;
- AssertSQl(G,'REVOKE SELECT ON A FROM B');
- G.Grantees.add(CreateGrantee('C'));
- FtoFree:=G;
- AssertSQl(G,'REVOKE SELECT ON A FROM B , C');
- G.Privileges.Clear;
- G.Privileges.Add(TSQLUPdatePrivilege.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'REVOKE UPDATE ON A FROM B , C');
- G.Privileges.Clear;
- G.Privileges.Add(TSQLDeletePrivilege.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'REVOKE DELETE ON A FROM B , C');
- G.Privileges.Clear;
- G.Privileges.Add(TSQLINSERTPrivilege.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'REVOKE INSERT ON A FROM B , C');
- G.Privileges.Clear;
- G.Privileges.Add(TSQLReferencePrivilege.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'REVOKE REFERENCES ON A FROM B , C');
- G.Privileges.Clear;
- G.Privileges.Add(TSQLAllPrivilege.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'REVOKE ALL PRIVILEGES ON A FROM B , C');
- G.GrantOption:=True;
- AssertSQl(G,'REVOKE GRANT OPTION FOR ALL PRIVILEGES ON A FROM B , C');
- G.GrantOption:=False;
- G.Privileges.Clear;
- G.Privileges.Add(TSQLSelectPrivilege.Create(Nil));
- G.Grantees.Clear;
- G.Grantees.Add(TSQLPublicGrantee.Create(Nil));
- FtoFree:=G;
- AssertSQl(G,'REVOKE SELECT ON A FROM PUBLIC');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLProcedureGrantee));
- AssertSQl(G,'REVOKE SELECT ON A FROM PROCEDURE B');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLViewGrantee));
- AssertSQl(G,'REVOKE SELECT ON A FROM VIEW B');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLTriggerGrantee));
- AssertSQl(G,'REVOKE SELECT ON A FROM TRIGGER B');
- FtoFree:=G;
- G.Privileges.Clear;
- Pu:=TSQLUPdatePrivilege.Create(Nil);
- PU.Columns:=TSQLElementList.Create(True);
- PU.Columns.Add(CreateIdentifier('C'));
- G.Privileges.Add(PU);
- FtoFree:=G;
- AssertSQl(G,'REVOKE UPDATE (C) ON A FROM TRIGGER B');
- PU.Columns.Add(CreateIdentifier('D'));
- FtoFree:=G;
- AssertSQl(G,'REVOKE UPDATE (C , D) ON A FROM TRIGGER B');
- G.Privileges.Clear;
- Pu:=TSQLReferencePrivilege.Create(Nil);
- PU.Columns:=TSQLElementList.Create(True);
- PU.Columns.Add(CreateIdentifier('C'));
- G.Privileges.Add(PU);
- FtoFree:=G;
- AssertSQl(G,'REVOKE REFERENCES (C) ON A FROM TRIGGER B');
- PU.Columns.Add(CreateIdentifier('D'));
- FtoFree:=G;
- AssertSQl(G,'REVOKE REFERENCES (C , D) ON A FROM TRIGGER B');
- end;
- procedure TTestGenerateSQL.TestRevokeProcedure;
- Var
- G : TSQLProcedureRevokeStatement;
- PG : TSQLProcedureGrantee;
- begin
- G:=TSQLProcedureRevokeStatement.Create(Nil);
- G.ProcedureName:=CreateIdentifier('A');
- FtoFree:=G;
- G.Grantees.add(CreateGrantee('B'));
- FtoFree:=G;
- AssertSQL(G,'REVOKE EXECUTE ON PROCEDURE A FROM B');
- G.Grantees.add(CreateGrantee('C'));
- FtoFree:=G;
- AssertSQL(G,'REVOKE EXECUTE ON PROCEDURE A FROM B , C');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLTriggerGrantee));
- FtoFree:=G;
- AssertSQL(G,'REVOKE EXECUTE ON PROCEDURE A FROM TRIGGER B');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLProcedureGrantee));
- FtoFree:=G;
- AssertSQL(G,'REVOKE EXECUTE ON PROCEDURE A FROM PROCEDURE B');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLViewGrantee));
- FtoFree:=G;
- AssertSQL(G,'REVOKE EXECUTE ON PROCEDURE A FROM VIEW B');
- G.Grantees.Clear;
- G.Grantees.Add(CreateGrantee('B',TSQLPublicGrantee));
- FtoFree:=G;
- AssertSQL(G,'REVOKE EXECUTE ON PROCEDURE A FROM PUBLIC');
- end;
- procedure TTestGenerateSQL.TestRevokeRole;
- Var
- G : TSQLRoleRevokeStatement;
- begin
- G:=TSQLRoleRevokeStatement.Create(Nil);
- G.Roles.Add(CreateIdentifier('A'));
- FtoFree:=G;
- G.Grantees.add(CreateGrantee('B'));
- FtoFree:=G;
- AssertSQL(G,'REVOKE A FROM B');
- G.Roles.Add(CreateIdentifier('C'));
- FtoFree:=G;
- AssertSQL(G,'REVOKE A , C FROM B');
- G.Grantees.add(CreateGrantee('D'));
- FtoFree:=G;
- AssertSQL(G,'REVOKE A , C FROM B , D');
- G.AdminOption:=True;
- AssertSQL(G,'REVOKE A , C FROM B , D');
- end;
- initialization
- RegisterTest(TTestGenerateSQL);
- end.
|