def querystrings(self) -> t.Sequence[QueryString]: prefix = "CREATE TABLE" if self.if_not_exists: prefix += " IF NOT EXISTS" if self.only_default_columns: columns = self.table._meta.non_default_columns else: columns = self.table._meta.columns base = f"{prefix} {self.table._meta.tablename}" columns_sql = ", ".join(["{}" for i in columns]) query = f"{base} ({columns_sql})" create_table = QueryString(query, *[i.querystring for i in columns]) create_indexes: t.List[QueryString] = [] for column in columns: if column._meta.index is True: create_indexes.extend( CreateIndex( table=self.table, columns=[column], method=column._meta.index_method, if_not_exists=self.if_not_exists, ).querystrings) return [create_table] + create_indexes
def default_ddl(self) -> t.Sequence[str]: prefix = "CREATE TABLE" if self.if_not_exists: prefix += " IF NOT EXISTS" if self.only_default_columns: columns = self.table._meta.non_default_columns else: columns = self.table._meta.columns base = f"{prefix} {self.table._meta.tablename}" columns_sql = ", ".join(i.ddl for i in columns) create_table_ddl = f"{base} ({columns_sql})" create_indexes: t.List[str] = [] for column in columns: if column._meta.index is True: create_indexes.extend( CreateIndex( table=self.table, columns=[column], method=column._meta.index_method, if_not_exists=self.if_not_exists, ).ddl ) return [create_table_ddl] + create_indexes
def create_index( cls, columns: t.List[t.Union[Column, str]], method: IndexMethod = IndexMethod.btree, ) -> CreateIndex: """ Create a table index. If multiple columns are specified, this refers to a multicolumn index, rather than multiple single column indexes. await Band.create_index([Band.name]).run() """ return CreateIndex(table=cls, columns=columns, method=method)
def create_index( cls, columns: t.List[t.Union[Column, str]], method: IndexMethod = IndexMethod.btree, if_not_exists: bool = False, ) -> CreateIndex: """ Create a table index. If multiple columns are specified, this refers to a multicolumn index, rather than multiple single column indexes. .. code-block:: python await Band.create_index([Band.name]) """ return CreateIndex( table=cls, columns=columns, method=method, if_not_exists=if_not_exists, )