Skip to content

AlexAvlonitis/soql-builder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SOQL-BUILDER

Build Status

A ruby SOQL query builder, to build salesforce query strings. It doesn't include all the available SOQL queries. Contributions are welcome.

How to use

# ruby
gem install 'soql_builder'

# rails
gem 'soql_builder'
require 'soql_builder'

builder = SoqlBuilder.new(type: :select)

Simple select query

# In the fields method you can add parent table fields, an exaple of Contract__r.Name below
builder.fields(['Name', 'Contract__r.Name'])
       .from('Account')
       .where('id = 1')

builder.query
=> "select Name, Contract__r.Name from Account where id = 1"

# Add a limit
builder.fields(['Name', 'Contract__r.Name'])
       .from('Account')
       .where('id = 1')
       .limit(1)

builder.query
=> "select Name, Contract__r.Name from Account where id = 1 limit 1"

Select query with subquery

builder.fields(['Name', 'Contract__r.Name'])
       .add_subquery(
         table: 'Account.Quotes',
         fields: ['Quotes.Name', 'Quotes.id']
       )
       .from('Account')
       .where('id = 1')

builder.query
=> "select Name, Contract__r.Name, (select Quotes.Name, Quotes.id from Account.Quotes) from Account where id = 1"

Select query with multiple subqueries

builder.fields(['Name', 'Contract__r.Name'])
       .add_subquery(
         table: 'Account.Quotes',
         fields: ['Quotes.Name', 'Quotes.id']
       )
       .add_subquery(
         table: 'Account.Contacts',
         fields: ['Contacts.Name']
       )
       .from('Account')
       .where('id = 1')

builder.query
=> "select Name, Contract__r.Name, (select Quotes.Name, Quotes.id from Account.Quotes), (select Contacts.Name from Account.Contacts) from Account where id = 1"

Queries can be added one at a time, instead of chaining

builder.fields(['Name', 'Contract__r.Name'])

builder.add_subquery(
         table: 'Account.Quotes',
         fields: ['Quotes.Name', 'Quotes.id']
       )

builder.from('Account')

builder.where('id = 1')

builder.query
=> "select Name, Contract__r.Name, (select Quotes.Name, Quotes.id from Account.Quotes) from Account where id = 1"

Reset the query and create another one with the same object

builder.fields(['Name', 'Contract__r.Name'])

builder.add_subquery(
         table: 'Account.Quotes',
         fields: ['Quotes.Name', 'Quotes.id']
       )

builder.from('Account')

builder.where('id = 1')

builder.query
=> "select Name, Contract__r.Name, (select Quotes.Name, Quotes.id from Account.Quotes) from Account where id = 1"

builder.clean

builder.fields(['Name', 'Contract__r.Name'])
       .from('Account')
       .where('id = 1')

builder.query
=> "select Name, Contract__r.Name from Account where id = 1"

About

Ruby SOQL query builder

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages