Skip to main content

Enum Querying

Sequelize Dart provides a powerful, type-safe API for querying ENUM columns.

Generated Enums

When you define an ENUM column in your model, the generator creates a dedicated Dart enum for it.

()
abstract class Users {
DataType status = DataType.ENUM(['active', 'inactive', 'pending']);
}

This generates:

enum UsersStatus {
active('active'),
inactive('inactive'),
pending('pending');

final String value;
const UsersStatus(this.value);
}

Query Accessors

Enum columns have a multi-layered query API to balance descriptiveness and conciseness.

1. Prefix Shortcuts

By applying the @EnumPrefix annotation, you can generate direct property shortcuts on the column wrapper.

('is', 'not')
DataType status = DataType.ENUM(['active', 'inactive', 'pending']);

This allows for very expressive queries:

// Equality shortcuts
(u) => u.status.isActive
(u) => u.status.isInactive

// Negation shortcuts
(u) => u.status.notActive
(u) => u.status.notPending

2. Grouped Access (is / not)

To avoid cluttering the top-level autocomplete of your column, all enum values are also available under is and not (or your custom prefixes).

// Grouped equality
(u) => u.status.is.active
(u) => u.status.is.inactive

// Grouped negation
(u) => u.status.not.active
(u) => u.status.not.pending
Alias for Groupers

Standard eq and not aliases are always available regardless of your @EnumPrefix configuration.

3. Null Checks

Null checks are implemented as functions, matching the standard Column API.

(u) => u.status.isNull()
(u) => u.status.isNotNull()

4. Type-Safe Methods

You can also use the .eq() and .not() methods with the generated enum, raw strings, or null.

// Using generated enum
(u) => u.status.eq(UsersStatus.active)

// Using raw string
(u) => u.status.not('inactive')

// Using null (same as isNull() / isNotNull())
(u) => u.status.eq(null)
(u) => u.status.not(null)

Summary Table

SyntaxDescriptionExample
ShortcutsDirect properties (via @EnumPrefix)u.status.isActive
GroupedNested under eq/notu.status.eq.active
NullFunction-based checksu.status.isNull()
MethodsType-safe method callsu.status.eq(UsersStatus.active)
NegationNegated comparisonsu.status.not.active