Home / Class/ SQLiteRecreateTableConvertor Class — drizzle-orm Architecture

SQLiteRecreateTableConvertor Class — drizzle-orm Architecture

Architecture documentation for the SQLiteRecreateTableConvertor class in sqlgenerator.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  5a12a936_1565_028f_2abf_979aa155bb2c["SQLiteRecreateTableConvertor"]
  fe4174c7_3b9c_5b26_98a0_b2395ca21939["sqlgenerator.ts"]
  5a12a936_1565_028f_2abf_979aa155bb2c -->|defined in| fe4174c7_3b9c_5b26_98a0_b2395ca21939
  01521a3b_4173_c376_f512_233e8967eaa0["can()"]
  5a12a936_1565_028f_2abf_979aa155bb2c -->|method| 01521a3b_4173_c376_f512_233e8967eaa0
  b8dce68a_f960_6f31_e72e_c412cda25ee3["convert()"]
  5a12a936_1565_028f_2abf_979aa155bb2c -->|method| b8dce68a_f960_6f31_e72e_c412cda25ee3

Relationship Graph

Source Code

drizzle-kit/src/sqlgenerator.ts lines 3764–3828

class SQLiteRecreateTableConvertor extends Convertor {
	can(statement: JsonStatement, dialect: Dialect): boolean {
		return (
			statement.type === 'recreate_table' && dialect === 'sqlite'
		);
	}

	convert(statement: JsonRecreateTableStatement): string | string[] {
		const { tableName, columns, compositePKs, referenceData, checkConstraints } = statement;

		const columnNames = columns.map((it) => `"${it.name}"`).join(', ');
		const newTableName = `__new_${tableName}`;

		const sqlStatements: string[] = [];

		sqlStatements.push(`PRAGMA foreign_keys=OFF;`);

		// map all possible variants
		const mappedCheckConstraints: string[] = checkConstraints.map((it) =>
			it.replaceAll(`"${tableName}".`, `"${newTableName}".`).replaceAll(`\`${tableName}\`.`, `\`${newTableName}\`.`)
				.replaceAll(`${tableName}.`, `${newTableName}.`).replaceAll(`'${tableName}'.`, `'${newTableName}'.`)
		);

		// create new table
		sqlStatements.push(
			new SQLiteCreateTableConvertor().convert({
				type: 'sqlite_create_table',
				tableName: newTableName,
				columns,
				referenceData,
				compositePKs,
				checkConstraints: mappedCheckConstraints,
			}),
		);

		// migrate data
		sqlStatements.push(
			`INSERT INTO \`${newTableName}\`(${columnNames}) SELECT ${columnNames} FROM \`${tableName}\`;`,
		);

		// drop table
		sqlStatements.push(
			new SQLiteDropTableConvertor().convert({
				type: 'drop_table',
				tableName: tableName,
				schema: '',
			}),
		);

		// rename table
		sqlStatements.push(
			new SqliteRenameTableConvertor().convert({
				fromSchema: '',
				tableNameFrom: newTableName,
				tableNameTo: tableName,
				toSchema: '',
				type: 'rename_table',
			}),
		);

		sqlStatements.push(`PRAGMA foreign_keys=ON;`);

		return sqlStatements;
	}
}

Domain

Frequently Asked Questions

What is the SQLiteRecreateTableConvertor class?
SQLiteRecreateTableConvertor is a class in the drizzle-orm codebase, defined in drizzle-kit/src/sqlgenerator.ts.
Where is SQLiteRecreateTableConvertor defined?
SQLiteRecreateTableConvertor is defined in drizzle-kit/src/sqlgenerator.ts at line 3764.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free