# QBWhereCondition

## Overview

The `QBWhereCondition` class is an essential component for managing the WHERE clause in queries within the Servoy environment. It provides flexibility for dynamically adding, removing, and clearing conditions in a query, making it easier to build complex SQL conditions. Through methods such as `js_add()` and `add()`, conditions can be added to the logical condition list, allowing both unnamed and named conditions to be incorporated into the query. These conditions can be specified programmatically or by name, offering significant versatility in query construction.

The class offers robust functionality to handle the logical structure of conditions with methods like `getQueryCondition()`, which retrieves or creates the `AndOrCondition` for the query. The `getQueryCondition(boolean create)` variant ensures that the condition is generated when needed, providing more control over the query construction process.

Additional methods like `remove()` and `clear()` allow for easy modification of the condition list. The `remove()` method enables the removal of named conditions from the logical group, while `clear()` resets all conditions in the WHERE clause, facilitating full control over the query structure.

## Properties Summarized

| Type                                                                                                 | Name                              | Summary                                                                      |
| ---------------------------------------------------------------------------------------------------- | --------------------------------- | ---------------------------------------------------------------------------- |
| [Array](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/array)                           | [conditionnames](#conditionnames) | Get the names for the conditions in the logical condition.                   |
| [QBTableClause](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbtableclause) | [parent](#parent)                 | Get query builder parent table clause, this may be a query or a join clause. |
| [QBSelect](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbselect)           | [root](#root)                     | Get query builder parent.                                                    |

## Methods Summarized

| Type                                                                                                           | Name                                        | Summary                                                     |
| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ----------------------------------------------------------- |
| [QBWhereCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbwherecondition)     | [add(condition)](#add-condition)            | Add a condition to the AND or OR condition list.            |
| [QBWhereCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbwherecondition)     | [add(name, condition)](#add-name-condition) | Add a named condition to the AND or OR condition list.      |
| [QBWhereCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbwherecondition)     | [clear()](#clear)                           | Clear the conditions in the query where-clause.             |
| [QBLogicalCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qblogicalcondition) | [getCondition(name)](#getcondition-name)    | Get a named condition in the logical condition.             |
| [QBWhereCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbwherecondition)     | [remove(name)](#remove-name)                | Remove a named condition from the AND or OR condition list. |

## Properties Detailed

### conditionnames

Get the names for the conditions in the logical condition.

**Type**\
[Array](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/array) an array of strings representing the names of the conditions in the logical condition.

**Sample**

```js
var cond = query.getCondition('mycond')
for (var cname in cond.conditionnames)
{
	var subcond = cond.getCondition(cname)
}
```

### parent

Get query builder parent table clause, this may be a query or a join clause.

**Type**\
[QBTableClause](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbtableclause)

**Sample**

```js
var query = datasources.db.example_data.person.createSelect();
	query.where.add(query.joins.person_to_parent.joins.person_to_parent.columns.name.eq('john'))
	foundset.loadRecords(query)
```

### root

Get query builder parent.

**Type**\
[QBSelect](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbselect)

**Sample**

```js
var subquery = datasources.db.example_data.order_details.createSelect();

	var query = datasources.db.example_data.orders.createSelect();
	query.where.add(query
		.or
			.add(query.columns.order_id.not.isin([1, 2, 3]))

			.add(query.exists(
					subquery.where.add(subquery.columns.orderid.eq(query.columns.order_id)).root
			))
		)

	foundset.loadRecords(query)
```

## Methods Detailed

### add(condition)

Add a condition to the AND or OR condition list.

**Parameters**

* [QBCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcondition) **condition** the condition to add

**Returns:** [QBWhereCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbwherecondition) the updated logical condition with the added condition.

**Sample**

```js
var query = datasources.db.example_data.orders.createSelect();
query.where.add(query.columns.orderdate.isNull)
```

### add(name, condition)

Add a named condition to the AND or OR condition list.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **name** the name of the condition
* [QBCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcondition) **condition** the condition to add

**Returns:** [QBWhereCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbwherecondition) the current QBWhereCondition instance after adding the named condition.

**Sample**

```js
var query = datasources.db.example_data.orders.createSelect();
query.where.add("mycond", query.columns.orderdate.isNull)
```

### clear()

Clear the conditions in the query where-clause.

**Returns:** [QBWhereCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbwherecondition) the current QBWhereCondition instance after clearing all conditions.

**Sample**

```js
var query = datasources.db.example_data.orders.createSelect();
query.where.clear()
```

### getCondition(name)

Get a named condition in the logical condition.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **name** The condition name.

**Returns:** [QBLogicalCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qblogicalcondition) the named condition as a new logical condition, or null if the condition does not exist.

**Sample**

```js
var cond = query.getCondition('mycond')
for (var cname in cond.conditionnames)
{
	var subcond = cond.getCondition(cname)
}
```

### remove(name)

Remove a named condition from the AND or OR condition list.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **name** The condition name.

**Returns:** [QBWhereCondition](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbwherecondition) the current QBWhereCondition instance after removing the specified condition.

**Sample**

```js
var query = datasources.db.example_data.orders.createSelect();
query.where.remove("mycond")
```

***
