Have ideas to improve npm?Join in the discussion! »

    soql-build
    TypeScript icon, indicating that this package has built-in type declarations

    2.1.1 • Public • Published

    soql-build Build Status

    Securely build SOQL string from JSON-based query structure

    Example

    import { buildSOQL } from 'soql-build';
     
    /**
     * Simple Query
     */
    const soql1 = buildSOQL({
      fields: ['Id', 'Name', 'Account.Name'],
      table: 'Opportunity',
      condition: {
        operator: 'AND',
        conditions: [
          {
            field: 'Amount',
            operator: '>=',
            value: 5000,
          },
        ],
      },
    });
     
    console.log(soql1);
    // => SELECT Id, Name, Account.Name FROM Opportunity WHERE Amount >= 5000
     
    /**
     * Complex Condition / Order By / Limit / Offset
     */
    const soql2 = buildSOQL({
      fields: ['Id', 'Name', 'Account.Name'],
      table: 'Opportunity',
      condition: {
        operator: 'AND',
        conditions: [
          {
            operator: 'NOT',
            condition: {
              field: 'Account.Name',
              operator: 'LIKE',
              value: '%a%',
            },
          },
          {
            field: 'Amount',
            operator: '>=',
            value: 5000,
          },
          {
            field: 'Type',
            operator: '!=',
            value: null,
          },
          {
            field: 'StageName',
            operator: 'IN',
            value: ['Prospecting', 'Value Proposition', 'Qualification'],
          },
          {
            operator: 'OR',
            conditions: [
              {
                field: 'Account.Owner.Username',
                operator: '!=',
                value: 'user01@example.com',
              },
              {
                field: 'Account.Owner.IsActive',
                operator: '=',
                value: false,
              },
              {
                operator: 'AND',
                conditions: [
                  {
                    field: 'CloseDate',
                    operator: '>=',
                    value: {
                      type: 'date',
                      value: '2008-01-01',
                    },
                  },
                  {
                    field: 'CloseDate',
                    operator: '<',
                    value: {
                      type: 'date',
                      value: 'TODAY',
                    },
                  },
                ],
              },
            ],
          },
        ],
      },
      sortInfo: [
        {
          field: 'Account.Type',
          direction: 'ASC',
          nullOrder: 'LAST',
        },
        {
          field: 'Amount',
          direction: 'DESC',
        },
      ],
      limit: 1000,
      offset: 50,
    });
     
    console.log(soql2);
    // => SELECT Id, Name, Account.Name FROM Opportunity WHERE (NOT Account.Name LIKE '%a%') AND Amount >= 5000 AND Type != null AND StageName IN ('Prospecting', 'Value Proposition', 'Qualification') AND (Account.Owner.Username != 'user01@example.com' OR Account.Owner.IsActive = false OR (CloseDate >= 2008-01-01 AND CloseDate < TODAY)) ORDER BY Account.Type ASC NULLS LAST, Amount DESC LIMIT 1000 OFFSET 50
     
    /**
     * Function / Child Relationship
     */
    const soql3 = buildSOQL({
      fields: [
        'Id',
        'Name',
        {
          type: 'function',
          function: 'CALENDAR_YEAR',
          arguments: ['CloseDate'],
        },
        {
          type: 'subquery',
          fields: [
            'Id',
            'Subject',
            {
              type: 'function',
              function: 'toLabel',
              arguments: ['Status'],
            },
          ],
          relationship: 'ActivityHistories',
          condition: {
            operator: '=',
            field: 'IsTask',
            value: true,
          },
          sortInfo: [
            {
              field: 'ActivityDate',
              direction: 'DESC',
            },
          ],
          limit: 5,
        },
      ],
      table: 'Opportunity',
    });
     
    console.log(soql3);
    // => SELECT Id, Name, CALENDAR_YEAR(CloseDate), (SELECT Id, Subject, toLabel(Status) FROM ActivityHistories WHERE IsTask = true ORDER BY ActivityDate DESC LIMIT 5) FROM Opportunity
     
    /**
     * Group By Query
     */
    const soql4 = buildSOQL({
      fields: [
        {
          type: 'function',
          function: 'MAX',
          arguments: ['CreatedDate'],
        },
      ],
      table: 'Account',
      grouping: {
        fields: ['Type', 'Industry'],
        subtotal: 'ROLLUP',
        having: {
          field: {
            type: 'function',
            function: 'MAX',
            arguments: ['CreatedDate'],
          },
          operator: '<=',
          value: {
            type: 'date',
            value: 'LAST_YEAR',
          },
        },
      },
    });
     
    console.log(soql4);
    // => SELECT MAX(CreatedDate) FROM Account GROUP BY ROLLUP (Type, Industry) HAVING MAX(CreatedDate) <= LAST_YEAR

    Keywords

    none

    Install

    npm i soql-build

    DownloadsWeekly Downloads

    1

    Version

    2.1.1

    License

    MIT

    Unpacked Size

    221 kB

    Total Files

    69

    Last publish

    Collaborators

    • avatar