Source code for luminadb.index

"""Indexes"""

from json import dumps
from .utils import check_one, check_iter

[docs] class Index: """Index""" def __init__( self, name: str = "", target: str = "", columns: tuple[str] | None = None, unique: bool = False, ) -> None: self._name = name self._target = target self._columns = columns if columns is not None else () self._unique = unique
[docs] def name(self, name: str): """Set this index name""" self._name = name return self
[docs] def target(self, target: str): """Set this index target table""" self._target = target return self
[docs] def columns(self, *columns: str): """Set which index this index is based on""" self._columns = columns return self
[docs] def unique(self): """Set whether this index is unique""" self._unique = True return self
[docs] def build_sql(self): """Return current information as SQL""" if not all(map(bool, (self._name, self._target, self._columns))): raise ValueError("Either name, target, or column is empty.") check_one(self._name) check_one(self._target) check_iter(self._columns) unique = "unique" if self._unique else "" columns = ", ".join(self._columns) return f"create {unique} index {self._name} on {self._target} ({columns})"
@property def index_name(self): """Return index name""" return self._name @property def index_target(self): """Return index target""" return self._target @property def index_columns(self): """Return columns target""" return self._columns @property def index_unique(self): """Return unique property""" return self._unique
[docs] def to_json(self): """Return current information as JSON""" return dumps( { "name": self._name, "target": self._target, "columns": self._columns, "unique": self._unique, } )