# QBLogicalCondition

## Overview

The `QBLogicalCondition` class represents a logical clause used in building queries within the Servoy environment. It allows for the dynamic addition and removal of conditions, enabling complex query construction. The class provides functionality for managing conditions in logical groupings, either through \`AND\` or \`OR\` operations, and conditions can be added by name for easy reference. ## Features

Key features of the class include methods like `js_add()`, which adds conditions to the logical group in a JavaScript-compatible manner,and `add()`, which allows for adding conditions programmatically. The `conditionnames()` method returns the list of condition names, \* while `getCondition()` retrieves a specific condition by its name. Conditions can also be cleared or removed with `clear()` and `remove()`, respectively. Additionally, the class includes a `toString()` method that provides a string representation of the logical condition.

Overall, the `QBLogicalCondition` class is used to manage query conditions in Servoy, offering flexibility in how logical conditions are structured and manipulated within queries.

## Properties Summarized

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

## Methods Summarized

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

## Properties Detailed

### conditionnames

Get the names for the conditions in the logical condition.

**Type**\
[Array](/reference/servoycore/dev-api/js-lib/array.md) 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](/reference/servoycore/dev-api/database-manager/qbtableclause.md)

**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](/reference/servoycore/dev-api/database-manager/qbselect.md)

**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](/reference/servoycore/dev-api/database-manager/qbcondition.md) **condition** the condition to add

**Returns:** [QBLogicalCondition](/reference/servoycore/dev-api/database-manager/qblogicalcondition.md) 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 logical condition.

**Parameters**

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

**Returns:** [QBLogicalCondition](/reference/servoycore/dev-api/database-manager/qblogicalcondition.md) the updated logical condition with the named condition added.

**Sample**

```js
var query = datasources.db.example_data.orders.createSelect();
// create a logical condition
var condition = query.and
// add named conditions
condition.add("undated", query.columns.orderdate.isNull)
condition.add("expensive", query.columns.orderamount.gt(10000))

query.where.add("mycond", condition)

// part of the condition can be removed again
condition.remove("undated")
```

### clear()

Clear the conditions in the logical condition.

**Returns:** [QBLogicalCondition](/reference/servoycore/dev-api/database-manager/qblogicalcondition.md) the cleared logical condition.

**Sample**

```js
var cond = query.getCondition('mycond')
cond.clear()
```

### getCondition(name)

Get a named condition in the logical condition.

**Parameters**

* [String](/reference/servoycore/dev-api/js-lib/string.md) **name** The condition name.

**Returns:** [QBLogicalCondition](/reference/servoycore/dev-api/database-manager/qblogicalcondition.md) 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 logical condition.

**Parameters**

* [String](/reference/servoycore/dev-api/js-lib/string.md) **name** The condition name.

**Returns:** [QBLogicalCondition](/reference/servoycore/dev-api/database-manager/qblogicalcondition.md) the updated logical condition with the named condition removed.

**Sample**

```js
var cond = query.getCondition('mycond')
cond.remove('mysubcond')
```

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qblogicalcondition.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
