sqlparser.pp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. program sqlparser;
  2. {**
  3. * example usage of fpc TSqlParser
  4. *
  5. * @author : Fajar Khairil
  6. *}
  7. {$mode objfpc}{$H+}
  8. uses
  9. Classes, fpsqlparser, fpsqltree;
  10. var
  11. parser : TSQLParser;
  12. aInput: TStringStream;
  13. source: TSQLSelectStatement;
  14. QExpresion: TSQLBinaryExpression;
  15. stmtSelect: TSQLSelectStatement;
  16. lField: TSQLTableFieldDef;
  17. lTable: TSQLSimpleTableReference;
  18. lWhere: TSQLBinaryExpression;
  19. leftValue: TSQLIdentifierName;
  20. rightValue: TSQLIntegerLiteral;
  21. begin
  22. aInput := TStringStream.Create('SELECT name,age FROM PERSON WHERE id = 5');
  23. parser := TSQLParser.Create(aInput);
  24. try
  25. source := TSQLSelectStatement(parser.Parse);
  26. //TABLES AND FIELDS
  27. Writeln('Tables : ',source.Tables[0].GetAsSQL([]));
  28. Writeln('Fields : ',source.Fields[0].GetAsSQL([])+','+source.Fields[1].GetAsSQL([]) );
  29. //WHERE CLAUSE
  30. QExpresion := TSQLBinaryExpression(source.Where);
  31. WriteLn('Where Expr Operation : ', QExpresion.Operation );
  32. WriteLn('Where Expr Left : ', QExpresion.Left.GetAsSQL([]) );
  33. WriteLn('Where Expr Right : ', QExpresion.Right.GetAsSQL([]) );
  34. WriteLn('-----------PARSING DONE-----------');
  35. WriteLn();
  36. WriteLn('----------Reversing From Tree To Sql Statement ----------');
  37. stmtSelect := TSQLSelectStatement.Create(nil);
  38. //build Table
  39. lTable := TSQLSimpleTableReference.Create(stmtSelect);
  40. stmtSelect.Tables.add(lTable);
  41. lTable.ObjectName := TSQLIdentifierName.Create(lTable);
  42. lTable.ObjectName.Name:= 'persons';
  43. lTable.AliasName := TSQLIdentifierName.Create(lTable);
  44. lTable.AliasName.Name:= 'p';
  45. //Build Fields
  46. lField := TSQLTableFieldDef.Create(stmtSelect);
  47. lField.FieldName := TSQLIdentifierName.Create(lField);
  48. lField.FieldName.Name:= lTable.AliasName.Name+'.name';
  49. stmtSelect.Fields.Add(lField);
  50. lField := TSQLTableFieldDef.Create(stmtSelect);
  51. lField.FieldName := TSQLIdentifierName.Create(lField);
  52. lField.FieldName.Name:= lTable.AliasName.Name+'.age';
  53. stmtSelect.Fields.Add(lField);
  54. //end Build Fields
  55. //Where Expression
  56. lWhere := TSQLBinaryExpression.Create(stmtSelect);
  57. stmtSelect.Where := lWhere;
  58. lWhere.Operation:= boEQ;
  59. //left side of BinaryExpression
  60. lWhere.Left := TSQLIdentifierExpression.Create(lWhere);
  61. leftValue := TSQLIdentifierName.Create(lWhere.left);
  62. TSQLIdentifierExpression(lWhere.Left).Identifier := leftValue;
  63. leftValue.Name:= lTable.AliasName.Name+'.id';
  64. //right side of BinaryExpression
  65. lWhere.right := TSQLLiteralExpression.Create(lWhere);
  66. rightValue := TSQLIntegerLiteral.Create(lWhere.right);
  67. TSQLLiteralExpression(lWhere.right).Literal := rightValue;
  68. rightValue.Value:= 5;
  69. //end Where Expression
  70. //kick!!
  71. WriteLn( stmtSelect.GetAsSQL([sfoDoubleQuotes,sfoBackQuoteIdentifier]) );
  72. WriteLn('-----------Reverse DONE-----------');
  73. WriteLn();
  74. finally
  75. stmtSelect.Free;
  76. source.free;
  77. aInput.Free;
  78. parser.Free;
  79. end;
  80. end.