Offset

The offset method allows you to skip a specified number of rows from the beginning of your query results. This is commonly used with limit() for controlling result sets.

Basic Usage

import { createQueryBuilder } from '@hypequery/clickhouse';

const db = createQueryBuilder<Schema>();

// Skip first 20 rows and return next 10
const query = db
  .table('users')
  .select(['id', 'name', 'email'])
  .orderBy('created_at', 'DESC')
  .limit(10)
  .offset(20)
  .toSQL();
// Result: SELECT id, name, email FROM users ORDER BY created_at DESC LIMIT 10 OFFSET 20

Type Definitions

offset(count: number): this

Parameters

  • count: The number of rows to skip from the beginning

Returns

Returns the query builder instance for method chaining.

Examples

Basic Offset

// Skip first 10 users, get next 10
const query = db
  .table('users')
  .select(['id', 'name', 'created_at'])
  .orderBy('created_at', 'DESC')
  .limit(10)
  .offset(10)
  .toSQL();
// Result: SELECT id, name, created_at FROM users ORDER BY created_at DESC LIMIT 10 OFFSET 10

Offset with Filtering

// Skip first 50 active users, get next 10
const query = db
  .table('users')
  .select(['id', 'name', 'status'])
  .where('status', 'eq', 'active')
  .orderBy('created_at', 'DESC')
  .limit(10)
  .offset(50)
  .toSQL();
// Result: SELECT id, name, status FROM users WHERE status = 'active' ORDER BY created_at DESC LIMIT 10 OFFSET 50

Type Safety

The offset method provides basic TypeScript support:

interface UserSchema {
  users: {
    id: 'UInt32';
    name: 'String';
    email: 'String';
  };
}

const db = createQueryBuilder<UserSchema>();

// ✅ Valid offset value
const query = db
  .table('users')
  .select(['id', 'name'])
  .orderBy('created_at', 'DESC')
  .limit(10)
  .offset(20) // Positive integer
  .toSQL();

// ❌ TypeScript error for invalid offset
const query2 = db
  .table('users')
  .select(['id', 'name'])
  .orderBy('created_at', 'DESC')
  .limit(10)
  .offset(-5) // TypeScript error: negative number
  .toSQL();