# ApexSelectQueryBuilder (/docs/core/reference/api/interfaces/ApexSelectQueryBuilder)



[@kysoql/core](/docs/core/reference/api) / ApexSelectQueryBuilder

Apex rendering wrapper for a typed SELECT query.

## Type Parameters [#type-parameters]

| Type Parameter                                                                                   | Default type                                                               |
| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------- |
| `DB`                                                                                             | -                                                                          |
| `TB` *extends* keyof `DB`                                                                        | -                                                                          |
| `O`                                                                                              | -                                                                          |
| `Mode` *extends* [`SelectQueryMode`](/docs/core/reference/api/type-aliases/SelectQueryMode)      | [`SelectQueryMode`](/docs/core/reference/api/type-aliases/SelectQueryMode) |
| `Context` *extends* [`ApexQueryContext`](/docs/core/reference/api/type-aliases/ApexQueryContext) | `"static"`                                                                 |

## Methods [#methods]

<a id="api-call" />

### $call() [#call]

```ts
$call<T>(func): T;
```

Passes this builder to `func` and returns the callback result.

#### Type Parameters [#type-parameters-1]

| Type Parameter |
| -------------- |
| `T`            |

#### Parameters [#parameters]

| Parameter | Type          |
| --------- | ------------- |
| `func`    | (`qb`) => `T` |

#### Returns [#returns]

`T`

***

<a id="api-if" />

### $if() [#if]

```ts
$if<O2>(condition, func): ApexSelectQueryBuilder<DB, TB, ConditionalOutput<O, O2>, Mode, Context>;
```

Conditionally applies a builder callback; when false, the runtime query is unchanged.

#### Type Parameters [#type-parameters-2]

| Type Parameter |
| -------------- |
| `O2`           |

#### Parameters [#parameters-1]

| Parameter   | Type                                                                           |
| ----------- | ------------------------------------------------------------------------------ |
| `condition` | `boolean`                                                                      |
| `func`      | (`qb`) => `ApexSelectQueryBuilder`\<`DB`, `TB`, `O` & `O2`, `Mode`, `Context`> |

#### Returns [#returns-1]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `ConditionalOutput`\<`O`, `O2`>, `Mode`, `Context`>

***

<a id="api-clearlimit" />

### clearLimit() [#clearlimit]

```ts
clearLimit(): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Returns a builder with the `LIMIT` clause removed.

#### Returns [#returns-2]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-clearoffset" />

### clearOffset() [#clearoffset]

```ts
clearOffset(): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Returns a builder with the `OFFSET` clause removed.

#### Returns [#returns-3]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-clearorderby" />

### clearOrderBy() [#clearorderby]

```ts
clearOrderBy(): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Returns a builder with all `ORDER BY` items removed.

#### Returns [#returns-4]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-clearwhere" />

### clearWhere() [#clearwhere]

```ts
clearWhere(): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Returns a builder with the `WHERE` predicate removed.

#### Returns [#returns-5]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-compile" />

### compile() [#compile]

```ts
compile(): CompiledQuery<O>;
```

Compiles the current operation tree into a `CompiledQuery`.

#### Returns [#returns-6]

[`CompiledQuery`](/docs/core/reference/api/interfaces/CompiledQuery)\<`O`>

***

<a id="api-allrows" />

### allRows() [#allrows]

```ts
allRows(): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Adds the Apex `ALL ROWS` clause.

#### Returns [#returns-7]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-forupdate" />

### forUpdate() [#forupdate]

```ts
forUpdate(): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Adds `FOR UPDATE` so Salesforce locks the selected records.

#### Returns [#returns-8]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-limit" />

### limit() [#limit]

```ts
limit(limit): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Adds or replaces the SOQL `LIMIT` clause.

#### Parameters [#parameters-2]

| Parameter | Type                                                                                                  |
| --------- | ----------------------------------------------------------------------------------------------------- |
| `limit`   | `number` \| [`ApexBindExpression`](/docs/core/reference/api/interfaces/ApexBindExpression)\<`number`> |

#### Returns [#returns-9]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-offset" />

### offset() [#offset]

```ts
offset(offset): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Adds or replaces the SOQL `OFFSET` clause.

#### Parameters [#parameters-3]

| Parameter | Type                                                                                                  |
| --------- | ----------------------------------------------------------------------------------------------------- |
| `offset`  | `number` \| [`ApexBindExpression`](/docs/core/reference/api/interfaces/ApexBindExpression)\<`number`> |

#### Returns [#returns-10]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-selectsubquery" />

### selectSubquery() [#selectsubquery]

```ts
selectSubquery<Relationship, SubqueryOutput, SubqueryFunctionMode>(relationship, callback): ApexSelectQueryBuilder<DB, TB, O & { readonly [Key in string]: SalesforceQueryResult<Simplify<SubqueryOutput>> }, AfterSubqueryMode<Mode, SubqueryFunctionMode>, Context>;
```

Adds a typed child-relationship subquery selection.

#### Type Parameters [#type-parameters-3]

| Type Parameter                                                            |
| ------------------------------------------------------------------------- |
| `Relationship` *extends* `string`                                         |
| `SubqueryOutput`                                                          |
| `SubqueryFunctionMode` *extends* `"none"` \| `"present"` \| `"forbidden"` |

#### Parameters [#parameters-4]

| Parameter      | Type                                                                                                                                                                                                                                                                                            |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `relationship` | `Relationship` & `ChildRelationshipReference`\<`DB`, `TB`, `Relationship`>                                                                                                                                                                                                                      |
| `callback`     | (`query`) => [`RelationshipSubqueryBuilder`](/docs/core/reference/api/interfaces/RelationshipSubqueryBuilder)\<`DB`, `ChildObjectName`\<`DB`, `TB`, `Extract`\<`Relationship`, `ChildRelationshipName`\<`DB`, `TB`>>>, `SubqueryOutput`, readonly \[`unknown`], `SubqueryFunctionMode`, `true`> |

#### Returns [#returns-11]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O` & `{ readonly [Key in string]: SalesforceQueryResult<Simplify<SubqueryOutput>> }`, `AfterSubqueryMode`\<`Mode`, `SubqueryFunctionMode`>, `Context`>

***

<a id="api-where" />

### where() [#where]

#### Call Signature [#call-signature]

```ts
where(expression): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Adds a typed `WHERE` predicate and combines it with any existing predicate using `AND`.

##### Parameters [#parameters-5]

| Parameter    | Type                                                                   |
| ------------ | ---------------------------------------------------------------------- |
| `expression` | [`SoqlRawBuilder`](/docs/core/reference/api/interfaces/SoqlRawBuilder) |

##### Returns [#returns-12]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

#### Call Signature [#call-signature-1]

```ts
where(expression): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Adds a typed `WHERE` predicate and combines it with any existing predicate using `AND`.

##### Parameters [#parameters-6]

| Parameter    | Type                                      |
| ------------ | ----------------------------------------- |
| `expression` | `ApexWhereExpressionFactory`\<`DB`, `TB`> |

##### Returns [#returns-13]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

#### Call Signature [#call-signature-2]

```ts
where(
   lhs,
   op,
   rhs
): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Adds a typed `WHERE` predicate and combines it with any existing predicate using `AND`.

##### Parameters [#parameters-7]

| Parameter | Type                                                                                      |
| --------- | ----------------------------------------------------------------------------------------- |
| `lhs`     | [`ApexBindExpression`](/docs/core/reference/api/interfaces/ApexBindExpression)\<`string`> |
| `op`      | `"includes"`                                                                              |
| `rhs`     | readonly `string`\[]                                                                      |

##### Returns [#returns-14]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

#### Call Signature [#call-signature-3]

```ts
where<RE, OP>(
   lhs,
   op,
   rhs
): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Adds a typed `WHERE` predicate and combines it with any existing predicate using `AND`.

##### Type Parameters [#type-parameters-4]

| Type Parameter                                                                                                                                                                                                                                                                    |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `RE` *extends* `string`                                                                                                                                                                                                                                                           |
| `OP` *extends* \| `"="` \| `"!="` \| [`OrderedComparisonOperator`](/docs/core/reference/api/type-aliases/OrderedComparisonOperator) \| `"in"` \| `"not in"` \| [`MultiSelectComparisonOperator`](/docs/core/reference/api/type-aliases/MultiSelectComparisonOperator) \| `"like"` |

##### Parameters [#parameters-8]

| Parameter | Type                                                                                                                                              |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `lhs`     | `RE` *extends* `FilterableFieldName`\<`DB`, `TB`, `RE`> ? `RE` : `never`                                                                          |
| `op`      | `OP`                                                                                                                                              |
| `rhs`     | [`ApexOperandValueExpression`](/docs/core/reference/api/type-aliases/ApexOperandValueExpression)\<`DB`, `TB`, `NoInfer`\<`RE`>, `NoInfer`\<`OP`>> |

##### Returns [#returns-15]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-setoptions" />

### setOptions() [#setoptions]

```ts
setOptions(options): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Adds dynamic Apex `SET OPTIONS` from a bound `Database.QueryOptions` variable.

#### Parameters [#parameters-9]

| Parameter | Type                                                                                                                                                                                                       |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `options` | `DynamicApexOnly`\<`Context`, [`ApexBindExpression`](/docs/core/reference/api/interfaces/ApexBindExpression)\<[`ApexDatabaseQueryOptions`](/docs/core/reference/api/interfaces/ApexDatabaseQueryOptions)>> |

#### Returns [#returns-16]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-withsystemmode" />

### withSystemMode() [#withsystemmode]

```ts
withSystemMode(): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Compiles the Apex query with `WITH SYSTEM_MODE`.

#### Returns [#returns-17]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-withusermode" />

### withUserMode() [#withusermode]

```ts
withUserMode(): ApexSelectQueryBuilder<DB, TB, O, Mode, Context>;
```

Compiles the Apex query with `WITH USER_MODE`.

#### Returns [#returns-18]

`ApexSelectQueryBuilder`\<`DB`, `TB`, `O`, `Mode`, `Context`>

***

<a id="api-tooperationnode" />

### toOperationNode() [#tooperationnode]

```ts
toOperationNode(): SelectQueryNode;
```

Returns the immutable operation node represented by this builder.

#### Returns [#returns-19]

[`SelectQueryNode`](/docs/core/reference/api/type-aliases/SelectQueryNode)
