Skip to content

ScyllaDBGrammar

ScyllaDBGrammar

ScyllaDB-specific query grammar implementation. Compiles query components into CQL (Cassandra Query Language) statements. Supports ScyllaDB-specific features like TTL, ALLOW FILTERING, and TOKEN queries.

compileSelect

Compiles a SELECT query into CQL.

Parameters

NameDescription
queryQuery components object

Example

typescript
const cql = grammar.compileSelect({
  columns: ['id', 'name', 'email'],
  from: 'users',
  wheres: [
    { type: 'basic', column: 'status', operator: '=', value: 'active' }
  ],
  orders: [{ column: 'created_at', direction: 'desc' }],
  limit: 10,
  allowFiltering: true
});

returns — Compiled CQL SELECT statement

compileInsert

Compiles an INSERT query into CQL. Supports ScyllaDB-specific features like TTL and IF NOT EXISTS.

Parameters

NameDescription
queryInsert query components

Example

typescript
const cql = grammar.compileInsert({
  table: 'users',
  values: { id: '123', name: 'John', email: 'john@example.com' },
  ttl: 3600,
  ifNotExists: true
});
// Returns: "INSERT INTO users (id, name, email) VALUES (?, ?, ?) USING TTL 3600 IF NOT EXISTS"

returns — Compiled CQL INSERT statement

compileUpdate

Compiles an UPDATE query into CQL. Supports ScyllaDB-specific features like TTL and conditional updates.

Parameters

NameDescription
queryUpdate query components

Example

typescript
const cql = grammar.compileUpdate({
  table: 'users',
  values: { name: 'Jane', email: 'jane@example.com' },
  wheres: [{ type: 'basic', column: 'id', operator: '=', value: '123' }],
  ttl: 7200,
  ifConditions: [{ type: 'basic', column: 'version', operator: '=', value: 1 }]
});

returns — Compiled CQL UPDATE statement

compileDelete

Compiles a DELETE query into CQL. Supports partial column deletion and conditional deletes.

Parameters

NameDescription
queryDelete query components

Example

typescript
const cql = grammar.compileDelete({
  table: 'users',
  columns: ['email', 'phone'], // Partial delete
  wheres: [{ type: 'basic', column: 'id', operator: '=', value: '123' }],
  ifConditions: [{ type: 'basic', column: 'status', operator: '=', value: 'inactive' }]
});

returns — Compiled CQL DELETE statement

compileWheres

Compiles WHERE clauses into CQL. Supports various WHERE types including basic, IN, BETWEEN, NULL checks, and TOKEN queries.

Parameters

NameDescription
wheresArray of WHERE clause objects

Example

typescript
const whereClause = grammar.compileWheres([
  { type: 'basic', column: 'status', operator: '=', value: 'active', boolean: 'AND' },
  { type: 'in', column: 'role', values: ['admin', 'user'], boolean: 'AND' },
  { type: 'token', columns: ['user_id'], operator: '>', values: ['123'], boolean: 'AND' }
]);

returns — Compiled WHERE clause string

wrapTable

Wraps a table name for ScyllaDB. ScyllaDB typically doesn't require table name wrapping unless using reserved words.

Parameters

NameDescription
tableThe table name to wrap

Example

typescript
const wrapped = grammar.wrapTable('user_profiles');
// Returns: "user_profiles"

returns — The wrapped table name

wrapColumn

Wraps a column name for ScyllaDB. ScyllaDB typically doesn't require column name wrapping unless using reserved words.

Parameters

NameDescription
columnThe column name to wrap

Example

typescript
const wrapped = grammar.wrapColumn('first_name');
// Returns: "first_name"

returns — The wrapped column name

parameter

Creates a parameter placeholder for prepared statements. ScyllaDB uses "?" as parameter placeholders.

Parameters

NameDescription
valueThe value to create a placeholder for

Example

typescript
const placeholder = grammar.parameter('some_value');
// Returns: "?"

returns — Parameter placeholder string

getColumnType

Maps column definition types to ScyllaDB CQL types.

Parameters

NameDescription
columnColumn definition object

Example

typescript
const type = grammar.getColumnType({ type: 'string', name: 'email' });
// Returns: "text"

const setType = grammar.getColumnType({ type: 'set', elementType: 'text', name: 'tags' });
// Returns: "set<text>"

returns — ScyllaDB CQL type string

compileColumn

Compiles a column definition into CQL.

Parameters

NameDescription
columnColumn definition object

Example

typescript
const columnDef = grammar.compileColumn({
  name: 'user_id',
  type: 'uuid',
  primary: true
});
// Returns: "user_id uuid"

returns — Compiled column definition string

compileCreateTable

Compiles a CREATE TABLE statement for ScyllaDB. Supports ScyllaDB-specific features like partition keys, clustering keys, and table options.

Parameters

NameDescription
definitionTable definition object

Example

typescript
const cql = grammar.compileCreateTable({
  name: 'user_events',
  columns: [
    { name: 'user_id', type: 'uuid' },
    { name: 'event_time', type: 'timestamp' },
    { name: 'event_type', type: 'text' },
    { name: 'data', type: 'text' }
  ],
  partitionKeys: ['user_id'],
  clusteringKeys: ['event_time'],
  clusteringOrder: { event_time: 'DESC' },
  tableOptions: {
    compaction: { class: 'TimeWindowCompactionStrategy' },
    gc_grace_seconds: 86400
  }
});

returns — Compiled CREATE TABLE CQL statement

compileAlterTable

Compiles an ALTER TABLE statement for ScyllaDB. Şu anda yalnızca yeni kolon eklemeyi destekler.

Parameters

NameDescription
definitionTablo tanımı; `columns` içinde sadece eklenmek istenen kolonlar olmalı.

Example

typescript
const cql = grammar.compileAlterTable({
  name: 'users',
  columns: [
    { name: 'last_login', type: 'timestamp' }
  ]
});
// "ALTER TABLE users ADD last_login timestamp"

returns — Compiled CQL ALTER TABLE statement

compileTableExists

Checks if a table exists in the current keyspace. Derlenen CQL’i kullanarak driver katmanında parametre olarak [keyspace, table] bind edilmelidir.

Parameters

NameDescription
tableKontrol edilecek tablo adı

Example

typescript
const cql = grammar.compileTableExists('users');
// "SELECT table_name FROM system_schema.tables WHERE keyspace_name = ? AND table_name = ?"

returns — Compiled CQL statement to check table existence

compileColumnExists

Checks if a column exists in a given table. Derlenen CQL’i kullanarak driver katmanında parametre olarak [keyspace, table, column] bind edilmelidir.

Parameters

NameDescription
tableTablo adı
columnKontrol edilecek kolon adı

Example

typescript
const cql = grammar.compileColumnExists('users', 'email');
// "SELECT column_name FROM system_schema.columns WHERE keyspace_name = ? AND table_name = ? AND column_name = ?"

returns — Compiled CQL statement to check column existence

rename

Renames a table in ScyllaDB. ScyllaDB/Cassandra doğrudan tablo yeniden adlandırmayı desteklemez.

Parameters

NameDescription
fromMevcut tablo adı
toYeni tablo adı

Released under the MIT License.