mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-04 16:10:20 +02:00
* Example from Fajar Khairil demonstrating the use of the SQLParser components (bug id 26141)
git-svn-id: trunk@27760 -
This commit is contained in:
parent
a29bd2cb0e
commit
708ca37a02
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -2008,6 +2008,7 @@ packages/fcl-db/examples/loadlibdemo.lpi svneol=native#text/plain
|
||||
packages/fcl-db/examples/loadlibdemo.pp svneol=native#text/plain
|
||||
packages/fcl-db/examples/pqeventstest.pp svneol=native#text/plain
|
||||
packages/fcl-db/examples/sqlite3loadlib.lpr svneol=native#text/plain
|
||||
packages/fcl-db/examples/sqlparser.pp svneol=native#text/plain
|
||||
packages/fcl-db/fpmake.pp svneol=native#text/plain
|
||||
packages/fcl-db/src/Dataset.txt svneol=native#text/plain
|
||||
packages/fcl-db/src/README.txt svneol=native#text/plain
|
||||
|
99
packages/fcl-db/examples/sqlparser.pp
Normal file
99
packages/fcl-db/examples/sqlparser.pp
Normal file
@ -0,0 +1,99 @@
|
||||
program sqlparser;
|
||||
|
||||
{**
|
||||
* example usage of fpc TSqlParser
|
||||
*
|
||||
* @author : Fajar Khairil
|
||||
*}
|
||||
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
Classes, fpsqlparser, fpsqltree;
|
||||
|
||||
var
|
||||
parser : TSQLParser;
|
||||
aInput: TStringStream;
|
||||
source: TSQLSelectStatement;
|
||||
QExpresion: TSQLBinaryExpression;
|
||||
stmtSelect: TSQLSelectStatement;
|
||||
lField: TSQLTableFieldDef;
|
||||
lTable: TSQLSimpleTableReference;
|
||||
lWhere: TSQLBinaryExpression;
|
||||
leftValue: TSQLIdentifierName;
|
||||
rightValue: TSQLIntegerLiteral;
|
||||
|
||||
begin
|
||||
aInput := TStringStream.Create('SELECT name,age FROM PERSON WHERE id = 5');
|
||||
parser := TSQLParser.Create(aInput);
|
||||
try
|
||||
source := TSQLSelectStatement(parser.Parse);
|
||||
|
||||
//TABLES AND FIELDS
|
||||
Writeln('Tables : ',source.Tables[0].GetAsSQL([]));
|
||||
Writeln('Fields : ',source.Fields[0].GetAsSQL([])+','+source.Fields[1].GetAsSQL([]) );
|
||||
|
||||
//WHERE CLAUSE
|
||||
QExpresion := TSQLBinaryExpression(source.Where);
|
||||
WriteLn('Where Expr Operation : ', QExpresion.Operation );
|
||||
WriteLn('Where Expr Left : ', QExpresion.Left.GetAsSQL([]) );
|
||||
WriteLn('Where Expr Right : ', QExpresion.Right.GetAsSQL([]) );
|
||||
WriteLn('-----------PARSING DONE-----------');
|
||||
WriteLn();
|
||||
|
||||
|
||||
WriteLn('----------Reversing From Tree To Sql Statement ----------');
|
||||
stmtSelect := TSQLSelectStatement.Create(nil);
|
||||
|
||||
//build Table
|
||||
lTable := TSQLSimpleTableReference.Create(stmtSelect);
|
||||
stmtSelect.Tables.add(lTable);
|
||||
lTable.ObjectName := TSQLIdentifierName.Create(lTable);
|
||||
lTable.ObjectName.Name:= 'persons';
|
||||
lTable.AliasName := TSQLIdentifierName.Create(lTable);
|
||||
lTable.AliasName.Name:= 'p';
|
||||
|
||||
//Build Fields
|
||||
lField := TSQLTableFieldDef.Create(stmtSelect);
|
||||
lField.FieldName := TSQLIdentifierName.Create(lField);
|
||||
lField.FieldName.Name:= lTable.AliasName.Name+'.name';
|
||||
stmtSelect.Fields.Add(lField);
|
||||
|
||||
lField := TSQLTableFieldDef.Create(stmtSelect);
|
||||
lField.FieldName := TSQLIdentifierName.Create(lField);
|
||||
lField.FieldName.Name:= lTable.AliasName.Name+'.age';
|
||||
stmtSelect.Fields.Add(lField);
|
||||
//end Build Fields
|
||||
|
||||
//Where Expression
|
||||
lWhere := TSQLBinaryExpression.Create(stmtSelect);
|
||||
stmtSelect.Where := lWhere;
|
||||
lWhere.Operation:= boEQ;
|
||||
|
||||
//left side of BinaryExpression
|
||||
lWhere.Left := TSQLIdentifierExpression.Create(lWhere);
|
||||
leftValue := TSQLIdentifierName.Create(lWhere.left);
|
||||
TSQLIdentifierExpression(lWhere.Left).Identifier := leftValue;
|
||||
leftValue.Name:= lTable.AliasName.Name+'.id';
|
||||
|
||||
//right side of BinaryExpression
|
||||
lWhere.right := TSQLLiteralExpression.Create(lWhere);
|
||||
rightValue := TSQLIntegerLiteral.Create(lWhere.right);
|
||||
TSQLLiteralExpression(lWhere.right).Literal := rightValue;
|
||||
rightValue.Value:= 5;
|
||||
//end Where Expression
|
||||
|
||||
//kick!!
|
||||
WriteLn( stmtSelect.GetAsSQL([sfoDoubleQuotes,sfoBackQuoteIdentifier]) );
|
||||
|
||||
WriteLn('-----------Reverse DONE-----------');
|
||||
WriteLn();
|
||||
finally
|
||||
stmtSelect.Free;
|
||||
source.free;
|
||||
aInput.Free;
|
||||
parser.Free;
|
||||
end;
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user