def get_query_column_modify(self, prev: 'ColumnConfig', table_name: str) -> Tuple[str, str]: """Get a sql query to modify data type of the column. Args: prev (ColumnConfig): previous column config Returns: Tuple[str, str]: sql query, message """ # TODO: handle alter settings. queries = [] msgs = [] if self.conf['sql_type'] != prev.conf['sql_type']: q = f'ALTER TABLE "{table_name}" ALTER COLUMN "{self.conf["column_name"]}" SET DATA TYPE {self.conf["sql_type"]};' queries.append(q) msg = f"\n* > MODIFY: {prev.conf['column_name']}: {prev.conf['sql_type']} --> {self.conf['sql_type']}" msgs.append(msg) settings_query, msg = self.get_query_column_alter(prev.conf['sql_alter'], table_name) # type: ignore if settings_query: queries.append(settings_query) msgs.append(msg) if self.conf['sql_engine'] == 'postgresql': return '\n'.join(queries), ''.join(msgs) else: raise ex.UnsupportedError(f"{self.conf['sql_engine']} not supported yet.")
def get_query_column_alter(self, prev_sql_alter: Tuple[str, ...], table_name: str) -> Tuple[str, str]: """Get a sql query to apply the sql_alter settings comparing with another config: prev. Args: prev_sql_alter (Tuple[str]): previous sql_alter Returns: Tuple[str, str]: sql query, message """ if not isinstance(prev_sql_alter, (tuple, list,)): raise TypeError(f"sql_alter {prev_sql_alter} must be a tuple, {type(prev_sql_alter)} given") if not isinstance(self.conf['sql_alter'], (tuple, list,)): raise TypeError(f"sql_alter {self.conf['sql_alter']} must be a tuple, {type(self.conf['sql_alter'])} given") query = '' msgs = [] query_stubs = [] column_name = self.conf["column_name"] for qs in self.conf['sql_alter']: if qs not in prev_sql_alter: # new settings qs = qs.format(table=table_name, column=column_name) query_stubs.append(qs) msgs.append(f"\n* + {qs}") if query_stubs: query = '; '.join(query_stubs) + ';' if self.conf['sql_engine'] == 'postgresql': return query, ''.join(msgs) else: raise ex.UnsupportedError(f"{self.conf['sql_engine']} not supported yet.")
def get_query_column_drop(self, table_name: str) -> Tuple[str, str]: """Get a sql query to drop the column. Returns: Tuple[str, str]: sql query, message """ query = f'ALTER TABLE "{table_name}" DROP COLUMN "{self.conf["column_name"]}" {self.conf["sql_ondrop"]};' msg = f'\n* > DROP: {self.conf["column_name"]} {self.conf["sql_ondrop"]}' if self.conf['sql_engine'] == 'postgresql': return query, msg else: raise ex.UnsupportedError(f"{self.conf['sql_engine']} not supported yet.")
def get_query_column_rename(self, old_column_name: str, table_name: str) -> Tuple[str, str]: """Get a sql query to rename the column. Args: old_column_name (str) Returns: Tuple[str, str]: sql query, message """ query = f'ALTER TABLE "{table_name}" RENAME COLUMN "{old_column_name}" TO "{self.conf["column_name"]}";' msg = f"\n* > RENAME: {old_column_name} --> {self.conf['column_name']}" if self.conf['sql_engine'] == 'postgresql': return query, msg else: raise ex.UnsupportedError(f"{self.conf['sql_engine']} not supported yet.")
def get_query_column_add(self, table_name: str) -> Tuple[str, str]: """Get a sql query to add the column. Returns: Tuple[str, str]: sql query, message """ queries = [] msgs = [] queries.append(f'ALTER TABLE "{table_name}" ADD COLUMN "{self.conf["column_name"]}" {self.conf["sql_type"]} {self.conf["sql_onadd"]};') msgs.append(f'\n* > ADD: {self.conf["column_name"]}: {self.conf["sql_type"]}') q, m = self.get_query_column_alter((), table_name) if q: queries.append(q) msgs.append(m) if self.conf['sql_engine'] == 'postgresql': return '\n'.join(queries), ''.join(msgs) else: raise ex.UnsupportedError(f"{self.conf['sql_engine']} not supported yet.")