Skip to content

juliendelplanque/PostgreSQLParser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

608 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PostgreSQLParser Build Status

A parser for PostgreSQL written in Pharo using PetitParser.

For now, the focus is made on PL/pgSQL source code.

Install

Metacello new	baseline: 'PostgreSQLParser';	repository: 'github://juliendelplanque/PostgreSQLParser/src';	load 

Groups

You can use the groups defined in the baseline to install only what you need. The following groups are available:

  • parser : Only the tokenizer and the grammar.
  • parser-tests : parser and its unit tests.
  • ast : Only the Abstract Syntactic Tree model.
  • ast-builder : ast + the object that builds the AST from the source code (also requires parser).
  • ast-builder-tests : ast-builder + its unit tests.
  • visitors : ast + default visitors of the AST.
  • core : parser + ast + ast-builder.
  • core-tests : core + all unit tests associated.
  • future : Experimental code of this project, do not use this in production.
  • dev : Everything you need to help in this project development loads future group as well.

Let's say you only need the ast group, the following code will load this specific group:

Metacello new	baseline: 'PostgreSQLParser';	repository: 'github://juliendelplanque/PostgreSQLParser/src';	load: 'ast' 

Use it as a dependency

To use this project as a dependency, add the following code in your baseline:

[...] spec baseline: 'PostgreSQLParser' with: [	spec	repository: 'github://juliendelplanque/PostgreSQLParser/src' ] [...] 

Usage

The complexity of the parsing process is hidden (for users) behind a facade: PostgreSQLParser class. The class-side methods provide a simple API to parse SQL code and get an AST as return.

For example:

ast := PostgreSQLParser parseSelectQuery: 'SELECT person.id, person.name, person.city_id FROM person, city WHERE person.city_id = city.id LIMIT 10'. "Mind that there is not trailing ';' because this is part of statement's grammar not query grammar." "... process the AST... " 

There other methods work similarly:

  • PostgreSQLParser class>>#parseUpdateQuery:
  • PostgreSQLParser class>>#parseCRUDQuery:
  • PostgreSQLParser class>>#parseDeleteQuery:
  • PostgreSQLParser class>>#parseInsertQuery:
  • PostgreSQLParser class>>#parseSelectQuery:
  • PostgreSQLParser class>>#parseStoredProcedureBody:

About

A parser for PostgreSQL written in Pharo using PetitParser.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors