Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/routes/docs/products/databases/+layout.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@
label: 'Pagination',
href: '/docs/products/databases/pagination'
},
{
label: 'Transactions',
href: '/docs/products/databases/transactions',
new: isNewUntil('31 Oct 2025')
},
{
label: 'Type generation',
href: '/docs/products/databases/type-generation',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -572,9 +572,192 @@ update_result = tablesDB.update_row(
```
{% /multicode %}

# Use transactions {% #use-transactions %}

Atomic numeric operations accept `transactionId`. When provided, increments/decrements are staged and applied on commit.

{% multicode %}
```client-web
await tablesDB.incrementRowColumn({
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rowId: '<ROW_ID>',
column: 'likes',
value: 1,
transactionId: '<TRANSACTION_ID>'
});
```
```client-flutter
await tablesDB.incrementRowColumn(
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rowId: '<ROW_ID>',
column: 'likes',
value: 1,
transactionId: '<TRANSACTION_ID>'
);
```
```client-apple
try await tablesDB.incrementRowColumn(
databaseId: "<DATABASE_ID>",
tableId: "<TABLE_ID>",
rowId: "<ROW_ID>",
column: "likes",
value: 1,
transactionId: "<TRANSACTION_ID>"
)
```
```client-android-kotlin
tablesDB.incrementRowColumn(
databaseId = "<DATABASE_ID>",
tableId = "<TABLE_ID>",
rowId = "<ROW_ID>",
column = "likes",
value = 1,
transactionId = "<TRANSACTION_ID>"
)
```
```client-android-java
tablesDB.incrementRowColumn(
"<DATABASE_ID>",
"<TABLE_ID>",
"<ROW_ID>",
"likes",
1,
"<TRANSACTION_ID>",
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return null;
}
System.out.println(result);
return null;
})
);
```
```client-react-native
await tablesDB.incrementRowColumn({
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rowId: '<ROW_ID>',
column: 'likes',
value: 1,
transactionId: '<TRANSACTION_ID>'
});
```
```server-nodejs
await tablesDB.incrementRowColumn({
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rowId: '<ROW_ID>',
column: 'likes',
value: 1,
transactionId: '<TRANSACTION_ID>'
});
```
```server-deno
await tablesDB.incrementRowColumn({
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rowId: '<ROW_ID>',
column: 'likes',
value: 1,
transactionId: '<TRANSACTION_ID>'
});
```
```server-python
tablesDB.increment_row_column(
database_id = '<DATABASE_ID>',
table_id = '<TABLE_ID>',
row_id = '<ROW_ID>',
column = 'likes',
value = 1,
transaction_id = '<TRANSACTION_ID>'
)
```
```server-php
$tablesDB->incrementRowColumn(
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rowId: '<ROW_ID>',
column: 'likes',
value: 1,
transactionId: '<TRANSACTION_ID>'
);
```
```server-ruby
tablesDB.increment_row_column(
database_id: '<DATABASE_ID>',
table_id: '<TABLE_ID>',
row_id: '<ROW_ID>',
column: 'likes',
value: 1,
transaction_id: '<TRANSACTION_ID>'
)
```
```server-dotnet
await tablesDB.IncrementRowColumn(
databaseId: "<DATABASE_ID>",
tableId: "<TABLE_ID>",
rowId: "<ROW_ID>",
column: "likes",
value: 1,
transactionId: "<TRANSACTION_ID>"
);
```
```server-dart
await tablesDB.incrementRowColumn(
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rowId: '<ROW_ID>',
column: 'likes',
value: 1,
transactionId: '<TRANSACTION_ID>'
);
```
```server-swift
try await tablesDB.incrementRowColumn(
databaseId: "<DATABASE_ID>",
tableId: "<TABLE_ID>",
rowId: "<ROW_ID>",
column: "likes",
value: 1,
transactionId: "<TRANSACTION_ID>"
)
```
```server-kotlin
tablesDB.incrementRowColumn(
databaseId = "<DATABASE_ID>",
tableId = "<TABLE_ID>",
rowId = "<ROW_ID>",
column = "likes",
value = 1,
transactionId = "<TRANSACTION_ID>"
)
```
```server-java
tablesDB.incrementRowColumn(
"<DATABASE_ID>",
"<TABLE_ID>",
"<ROW_ID>",
"likes",
1,
"<TRANSACTION_ID>",
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return null;
}
System.out.println(result);
return null;
})
);
```
{% /multicode %}

## Explore related features

- [Bulk operations](/docs/products/databases/bulk-operations) - Update multiple rows at once
- [Permissions](/docs/products/databases/permissions) - Control access to rows
- [Queries](/docs/products/databases/queries) - Find rows to update
- [Relationships](/docs/products/databases/relationships) - Update related rows
- [Relationships](/docs/products/databases/relationships) - Update related rows
150 changes: 145 additions & 5 deletions src/routes/docs/products/databases/bulk-operations/+page.markdoc
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,11 @@ const result = await tablesDB.createRows(
[
{
$id: sdk.ID.unique(),
data: { name: 'Row 1' }
name: 'Row 1'
},
{
$id: sdk.ID.unique(),
data: { name: 'Row 2' }
name: 'Row 2'
}
]
);
Expand All @@ -73,11 +73,11 @@ result = tablesDB.create_rows(
rows = [
{
'$id': appwrite.ID.unique(),
'data': { 'name': 'Row 1' }
'name': 'Row 1'
},
{
'$id': appwrite.ID.unique(),
'data': { 'name': 'Row 2' }
'name': 'Row 2'
}
]
)
Expand Down Expand Up @@ -262,4 +262,144 @@ When deleting rows, you must specify queries to filter which rows to delete.
If no queries are provided, all rows in the table will be deleted.
[Learn more about queries](/docs/products/databases/queries).

{% /info %}
{% /info %}

# Use transactions {% #use-transactions %}

All bulk operations accept `transactionId`. When provided, Appwrite stages the bulk request and applies it on commit. See [Transactions](/docs/products/databases/transactions).

{% multicode %}
```server-nodejs
await tablesDB.createRows({
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rows: [
{ $id: sdk.ID.unique(), name: 'One' },
{ $id: sdk.ID.unique(), name: 'Two' }
],
transactionId: '<TRANSACTION_ID>'
});
```
```server-python
tablesDB.create_rows(
database_id = '<DATABASE_ID>',
table_id = '<TABLE_ID>',
rows = [
{ '$id': appwrite.ID.unique(), 'name': 'One' },
{ '$id': appwrite.ID.unique(), 'name': 'Two' }
],
transaction_id = '<TRANSACTION_ID>'
)
```
```server-deno
await tablesDB.createRows({
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rows: [
{ $id: sdk.ID.unique(), name: 'One' },
{ $id: sdk.ID.unique(), name: 'Two' }
],
transactionId: '<TRANSACTION_ID>'
});
```
```server-php
$tablesDB->createRows(
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rows: [
[ '$id' => ID::unique(), 'name' => 'One' ],
[ '$id' => ID::unique(), 'name' => 'Two' ]
],
transactionId: '<TRANSACTION_ID>'
);
```
```server-ruby
tablesDB.create_rows(
database_id: '<DATABASE_ID>',
table_id: '<TABLE_ID>',
rows: [
{ '$id' => ID.unique(), 'name' => 'One' },
{ '$id' => ID.unique(), 'name' => 'Two' }
],
transaction_id: '<TRANSACTION_ID>'
)
```
```server-dotnet
await tablesDB.CreateRows(
databaseId: "<DATABASE_ID>",
tableId: "<TABLE_ID>",
rows: new List<Dictionary<string, object>>
{
new Dictionary<string, object>
{
["$id"] = ID.Unique(),
["name"] = "One"
},
new Dictionary<string, object>
{
["$id"] = ID.Unique(),
["name"] = "Two"
}
},
transactionId: "<TRANSACTION_ID>"
);
```
```server-dart
await tablesDB.createRows(
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rows: [
{ '\$id': ID.unique(), 'name': 'One' },
{ '\$id': ID.unique(), 'name': 'Two' }
],
transactionId: '<TRANSACTION_ID>'
);
```
```server-swift
try await tablesDB.createRows(
databaseId: "<DATABASE_ID>",
tableId: "<TABLE_ID>",
rows: [
["$id": ID.unique(), "name": "One"],
["$id": ID.unique(), "name": "Two"]
],
transactionId: "<TRANSACTION_ID>"
)
```
```server-kotlin
tablesDB.createRows(
databaseId = "<DATABASE_ID>",
tableId = "<TABLE_ID>",
rows = listOf(
mapOf("\$id" to ID.unique(), "name" to "One"),
mapOf("\$id" to ID.unique(), "name" to "Two")
),
transactionId = "<TRANSACTION_ID>"
)
```
```server-java
tablesDB.createRows(
"<DATABASE_ID>",
"<TABLE_ID>",
Arrays.asList(
Map.of(
"$id", ID.unique(),
"name", "One"
),
Map.of(
"$id", ID.unique(),
"name", "Two"
)
),
"<TRANSACTION_ID>",
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return null;
}
System.out.println(result);
return null;
})
);
```
{% /multicode %}
Loading
Loading