AGENT SKILL

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