Scheme class base

A description of a configurable part of a database schema.

The "scheme" concept, as used in this library, is a configurable part of a full database schema. That is, an SQLite database managed by this library has a schema split into two parts:

  • The first part is the unchangeable foundation, which consists of the mapping table and the scheme table. The mapping table holds all application-supplied key-value data in the mandatory keyid and value columns; it also always includes the kind virtual column. The scheme table holds the overall scheme version of the second part of the schema.
  • The second part is a configurable extension, which consists of additional virtual columns for the mapping table, partial indexes for those virtual columns, FTS indexes for application-supplied key-value data from the mapping table, and a JSON path to extract a Kind from any JSON value stored in the value column of the mapping table.

A scheme's description is defined by an application via the properties of the Scheme class: kindPath, virtualColumns, partialIndexes, and searchIndexes. Changes to the description must be accompanied by an overall scheme version change to trigger a scheme migration upon the first run of a new application build. A scheme migration updates the database schema to reflect the new configuration while leaving application-supplied key-value data intact. By increasing the Scheme.revision number, custom processing that modifies key-value data or performs other I/O operations can be added to a migration via Scheme.upgrader.

The overall scheme version is returned by the toDefinition function. A scheme migration is triggered when the overall scheme version changes, which occurs in the following cases:

See also: VirtualColumn, PartialIndex, and SearchIndex.

Annotations
  • @immutable

Constructors

Scheme({int revision = schemeInitialRevision, DatabaseUpgrader? upgrader, required String kindPath, VirtualColumns virtualColumns = const [], PartialIndexes partialIndexes = const [], SearchIndexes searchIndexes = const []})
Creates a description of a scheme using the given parameters.

Properties

hashCode → int
The hash code for this object.
no setterinherited
kindPath → String
The JSON path to extract Kinds from database JSON values.
final
partialIndexes → PartialIndexes
A list of the partial index descriptions.
final
revision → int
The application-provided revision number for this scheme description.
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
searchIndexes → SearchIndexes
A list of the FTS index descriptions.
final
upgrader → DatabaseUpgrader?
The callbacks invoked during scheme migration.
final
virtualColumns → VirtualColumns
A list of the generated virtual column descriptions.
final

Methods

deactivateUpdatersLookup() → void
Deactivates the SearchIndexUpdaters of the FTS indexes.
elementsDefinition(List<SchemeElement> elements) → Map<String, int>
Returns a map representing the overall version of the elements.
getPartialIndex(String name) → PartialIndex
Finds a PartialIndex with the given name.
getSearchIndex(String name) → SearchIndex
Finds a SearchIndex with the given name.
getSearchIndexesUpdater(Kind? kind) → SearchRowsUpdaters?
Returns the SearchRowsUpdaters for the given kind.
getVirtualColumn(String name) → VirtualColumn
Finds a VirtualColumn with the given name.
initializeUpdatersLookup(SQLite sqlite) → void
Initializes and registers the SearchIndexUpdaters of the FTS indexes.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toDefinition() → StdMap
Returns a JSON map representing the scheme's overall version.
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited

Constants

kKindPath → const String
The key for the kindPath part of the overall scheme version map.
kPartialIndexes → const String
The key for the partialIndexes part of the overall scheme version map.
kRevision → const String
The key for the revision part of the overall scheme version map.
kSchemaVersion → const String
The key for the schema version part of the overall scheme version map.
kSearchIndexes → const String
The key for the searchIndexes part of the overall scheme version map.
kVirtualColumns → const String
The key for the virtualColumns part of the overall scheme version map.