crud-ops
ScalarDB CRUD API patterns (Get, Scan, Insert, Upsert, Update, Delete) with examples, for writing or reviewing transactional code without SQL.
- License 许可
- MIT
- 最近更新
- 2026-11-12
- Stars
- ★ 13
- Forks
- 1
01 前言 Front Matter
- model
- sonnet
- description
- ScalarDB CRUD API patterns (Get, Scan, Insert, Upsert, Update, Delete) with examples, for writing or reviewing transactional code without SQL.
03 SKILL.md 正文
/scalardb:crud-ops — ScalarDB CRUD Operations Guide
Shared files: a path written @rules/…, @skills/…, @templates/… or @docs/… is relative to the
plugin root, ${CLAUDE_PLUGIN_ROOT} — not to the project being worked on. Read it from there.
Instructions
You are a ScalarDB CRUD operations expert. Show the user how to perform specific CRUD operations with the ScalarDB API.
Knowledge grounding: version-specific behavior (API signatures, config keys, exception retryability, edition-gated features) comes from the version-pinned OKF bundle, cited by resource URL, never from memory — @rules/okf-knowledge-bundle.md.
Interactive Flow
Step 1: Determine the operation
Ask: "What operation do you need help with?" if not specified.
Options:
- Get — Retrieve a single record by primary key or index
- Scan — Retrieve multiple records (partition scan, range scan, scan all, index scan)
- Insert — Insert a new record (fails if exists)
- Upsert — Insert or update a record
- Update — Update an existing record (does nothing if not exists)
- Delete — Delete a record
- Batch — Execute multiple operations atomically
- Key construction — Build single and composite keys
Step 2: Gather context
Ask about their schema:
- Namespace and table name
- Partition key column(s) and type(s)
- Clustering key column(s) and type(s) if applicable
- Value columns they want to read/write
Step 3: Generate code
Generate the complete code example including:
- Builder pattern usage
- Key construction
- Result extraction
- Proper exception handling
- Transaction lifecycle (begin, operation, commit, rollback)
Reference
Read ${CLAUDE_PLUGIN_ROOT}/skills/common/references/api-reference.md for the complete API reference.
Read ${CLAUDE_PLUGIN_ROOT}/rules/scalardb-crud-patterns.md for CRUD API coding rules.
Quick Reference Examples
Get by Primary Key
Optional<Result> result = tx.get(
Get.newBuilder()
.namespace("ns").table("tbl")
.partitionKey(Key.ofInt("id", 1))
.clusteringKey(Key.ofInt("ck", 2))
.build());
Get by Index
Optional<Result> result = tx.get(
Get.newBuilder()
.namespace("ns").table("tbl")
.indexKey(Key.ofText("order_id", orderId))
.build());
Scan (Partition)
List<Result> results = tx.scan(
Scan.newBuilder()
.namespace("ns").table("tbl")
.partitionKey(Key.ofInt("pk", 1))
.ordering(Scan.Ordering.desc("ck"))
.limit(100)
.build());
Scan (Range)
List<Result> results = tx.scan(
Scan.newBuilder()
.namespace("ns").table("tbl")
.partitionKey(Key.ofInt("pk", 1))
.start(Key.ofInt("ck", 10)).startInclusive(true)
.end(Key.ofInt("ck", 20)).endInclusive(false)
.build());
Scan All
List<Result> results = tx.scan(
Scan.newBuilder()
.namespace("ns").table("tbl")
.all()
.limit(100)
.build());
// Requires: scalar.db.cross_partition_scan.enabled=true
Insert
tx.insert(
Insert.newBuilder()
.namespace("ns").table("tbl")
.partitionKey(Key.ofInt("id", 1))
.textValue("name", "Alice")
.intValue("age", 30)
.build());
Upsert
tx.upsert(
Upsert.newBuilder()
.namespace("ns").table("tbl")
.partitionKey(Key.ofInt("id", 1))
.textValue("name", "Alice")
.intValue("age", 31)
.build());
Update with Condition
tx.update(
Update.newBuilder()
.namespace("ns").table("tbl")
.partitionKey(Key.ofInt("id", 1))
.intValue("balance", newBalance)
.condition(ConditionBuilder.updateIf(
ConditionBuilder.column("balance").isGreaterThanOrEqualToInt(amount)
).build())
.build());
Delete
tx.delete(
Delete.newBuilder()
.namespace("ns").table("tbl")
.partitionKey(Key.ofInt("id", 1))
.clusteringKey(Key.ofInt("ck", 2))
.build());
Key Construction (Composite)
Key compositeKey = Key.newBuilder()
.addInt("col1", 1)
.addText("col2", "abc")
.build();
Result Extraction
if (result.isPresent()) {
Result r = result.get();
int id = r.getInt("id"); // 0 if NULL
String name = r.getText("name"); // null if NULL
boolean isNull = r.isNull("name"); // check NULL
}
Output Format
Provide complete, runnable code examples with proper imports and exception handling. Tailor examples to the user's specific schema.
04 同仓库更多 Skills
verify-sql-migration
Prove a SQL migration on data: golden checks against an authorized source database and differential tests against ScalarDB. Never touches production.
verify-implementation
Check code against the design (API contract, transactions, security, requirements, the example chain) and report every divergence; optionally runs the eight-stage quality gate.
update-knowledge
Fetch or update an OKF knowledge bundle: ScalarDB/ScalarDL, or the vendored Kubernetes/Terraform bundle.
start
Interactive entry point for system architecture work: refactor a legacy application into services, or design a new system from requirements; picks the path from the project's state. To move a database to ScalarDB, use migrate-database.
select-scalardb-edition
Choose the ScalarDB edition (Community, Enterprise Standard or Premium, plus Enterprise Options), deployment mode and cluster topology through a short interview.
scaffold
Generate a runnable ScalarDB starter project for any of the six interface combinations: build, config, schema, service class, docker-compose and README.