def add_index(self, doctype, fields, index_name=None): """Creates an index with given fields if not already created. Index name will be `fieldname1_fieldname2_index`""" table_name = get_table_name(doctype) index_name = index_name or self.get_index_name(fields) fields_str = '", "'.join(re.sub(r"\(.*\)", "", field) for field in fields) self.sql_ddl(f'CREATE INDEX IF NOT EXISTS "{index_name}" ON `{table_name}` ("{fields_str}")')
def add_index(self, doctype: str, fields: List, index_name: str = None): """Creates an index with given fields if not already created. Index name will be `fieldname1_fieldname2_index`""" index_name = index_name or self.get_index_name(fields) table_name = get_table_name(doctype) if not self.has_index(table_name, index_name): self.commit() self.sql("""ALTER TABLE `%s` ADD INDEX `%s`(%s)""" % (table_name, index_name, ", ".join(fields)))
def delete(self, doctype: str, filters: Union[Dict, List] = None, debug=False, **kwargs): """Delete rows from a table in site which match the passed filters. This does trigger DocType hooks. Simply runs a DELETE query in the database. Doctype name can be passed directly, it will be pre-pended with `tab`. """ values = () filters = filters or kwargs.get("conditions") table = get_table_name(doctype) query = f"DELETE FROM `{table}`" if "debug" not in kwargs: kwargs["debug"] = debug if filters: conditions, values = self.build_conditions(filters) query = f"{query} WHERE {conditions}" return self.sql(query, values, **kwargs)
def change_column_type(self, doctype: str, column: str, type: str) -> Union[List, Tuple]: table_name = get_table_name(doctype) return self.sql( f"ALTER TABLE `{table_name}` MODIFY `{column}` {type} NOT NULL")
def describe(self, doctype: str) -> Union[List, Tuple]: table_name = get_table_name(doctype) return self.sql(f"DESC `{table_name}`")
def rename_table(self, old_name: str, new_name: str) -> Union[List, Tuple]: old_name = get_table_name(old_name) new_name = get_table_name(new_name) return self.sql(f"RENAME TABLE `{old_name}` TO `{new_name}`")
def change_column_type(self, table: str, column: str, type: str) -> Union[List, Tuple]: table_name = get_table_name(table) return self.sql( f'ALTER TABLE "{table_name}" ALTER COLUMN "{column}" TYPE {type}')
def describe(self, doctype: str) -> Union[List, Tuple]: table_name = get_table_name(doctype) return self.sql( f"SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME = '{table_name}'" )
def DocType(table_name: str, *args, **kwargs) -> Table: table_name = get_table_name(table_name) return Table(table_name, *args, **kwargs)