123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- 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.
|