# Glossary

The words these pages use, in alphabetical order, with what they mean in ARX.SDK.

## Terms

| Term | What it means |
|---|---|
| Aggregate | A value computed over rows: Count, Sum, Avg, Min, Max, optionally per group (`query.AggregateInfo`); a Count is always a `long` |
| Attribute | One value of an entity, by column name: `account["name"] = "Contoso"` |
| Batch scope | One transaction across several calls: `RunBatchAsync` commits when its body returns, `BeginBatchAsync` when you call `CommitAsync` |
| Business key | Columns other than the id that identify one record (an account number, an email), declared with `.Key(table, columns…)` |
| Capability | Something a provider can do (`Joins`, `TokenPaging`, …); `service.Capabilities` lists them, and a call outside them is ARX8001 |
| Catalog (schema catalog) | What you declare about your tables, once, at startup: each table's id column, keys, lookups, version column |
| Column set | The columns a read returns (`ArxColumnSet`): `new ArxColumnSet("name", "email")`, or every column. With a catalog the declared id is always read too |
| Compound key | A key of more than one column (`region` and `sku` together); declared with `.Key(table, "region", "sku")` |
| Connection string | The text that tells the driver where the database is and how to sign in; keep it in configuration, not in code |
| Constraint | A rule the database enforces on a table: a unique column, NOT NULL, a CHECK, a foreign key. A write that breaks one is an ARX3xxx error naming it |
| Criteria | The conditions a query's rows must meet (`query.Criteria`): a filter of conditions joined by AND or OR, which can hold nested filters |
| Dependency injection | Giving a class the objects it needs (an `IArxDataService`) from outside, registered once at startup (`services.AddSingleton<IArxDataService>(…)`) instead of created inside it |
| Entity | One record: a table name and its attributes (`ArxEntity`) |
| Generated id | An id the database (or ARX, on MongoDB) makes on insert: an identity column, a sequence, an ObjectId |
| Id column | The one column that identifies a record, declared per table; `ArxIdColumn.NoIdColumn` for a table without one |
| Link entity | A join in a query: `query.AddLink("contact", "id", "account_id", ArxJoinOperator.Left)`; its columns read back as `row["alias.column"]` |
| Lookup | A column that holds the id of a record in another table (a foreign key), read back as an `ArxEntityReference` |
| Match | How an update or delete finds its rows: by id (the default), a business key, or columns you name (`ArxMatch`) |
| Metadata-driven | Driven by data about the data: here, the table and column names are strings and the catalog describes the tables, so one piece of code can work on any table |
| Optimistic concurrency | Writes that check the record wasn't changed since it was read, using a version column (`.Version(table, column)`); a stale write is ARX2004 and nothing is written |
| Option set | Dynamics CRM's name for a column with a fixed list of values; ARX calls it a selection set |
| Paging cookie | An opaque text a page returns, passed back to read the next page (MongoDB, DynamoDB) |
| Preload | Reading the ids, keys and column types of tables from the database once, at startup, to build the catalog (`ArxPreLoadTable`) |
| Primary key | The database's own declaration of the column (or columns) that identify a row; ARX's id column is usually it |
| Provider | The package for one database (`ARX.SDK.PostgreSql`, …) and its service |
| Query expression | A read described as data (`ArxQueryExpression`): the table, column set, criteria, links, order and paging |
| Record id | The id of one record as Create returns it (`ArxRecordId`): its column and value; also `entity.RecordId`, and a plain value converts to one (`RetrieveAsync("country", "DE")`) |
| Round trip | One request to the database and its answer; fewer round trips usually means a faster call |
| Savepoint | A marker inside a transaction a failed call can be rolled back to, so the calls before it are kept; PostgreSQL, SQL Server and MySQL have them |
| Selection set | A fixed list of values a column may hold, with their labels (an option set), declared in the catalog |
| Service | The object that runs the operations against one database (`ArxPgDbService`, …); create one at startup and share it |
| Singleton | One instance for the whole application: register the service with `AddSingleton` in dependency injection |
| Strict mode | `service.Strict = true` on a preloaded service: only the columns the preload read may be used, anything else is ARX1018 |
| Supplied id | An id your application gives (a code, a Guid it makes) |
| Transaction | Several writes that are saved together or not at all: an `ArxTransaction` from a provider's connection, or a batch scope |
| Version column | An integer column ARX keeps for optimistic concurrency: an update with an old version is ARX2004 RecordChanged |
| XRM | Microsoft Dynamics 365's data SDK (Entity, QueryExpression, IOrganizationService), which ARX's entity and query model resembles; the Coming from Dynamics XRM guide compares them |
