Home / Class/ PgAlterTableAlterColumnSetTypeConvertor Class — drizzle-orm Architecture

PgAlterTableAlterColumnSetTypeConvertor Class — drizzle-orm Architecture

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

Entity Profile

Dependency Diagram

graph TD
  dd294fb2_8739_cd25_f681_d2eff5517675["PgAlterTableAlterColumnSetTypeConvertor"]
  fe4174c7_3b9c_5b26_98a0_b2395ca21939["sqlgenerator.ts"]
  dd294fb2_8739_cd25_f681_d2eff5517675 -->|defined in| fe4174c7_3b9c_5b26_98a0_b2395ca21939
  8d2f2860_8613_bd73_9baa_9305ce6ce444["can()"]
  dd294fb2_8739_cd25_f681_d2eff5517675 -->|method| 8d2f2860_8613_bd73_9baa_9305ce6ce444
  aca821b2_b407_7075_a020_0b97ae4b1e10["convert()"]
  dd294fb2_8739_cd25_f681_d2eff5517675 -->|method| aca821b2_b407_7075_a020_0b97ae4b1e10

Relationship Graph

Source Code

drizzle-kit/src/sqlgenerator.ts lines 1895–1964

class PgAlterTableAlterColumnSetTypeConvertor extends Convertor {
	can(statement: JsonStatement, dialect: Dialect): boolean {
		return (
			statement.type === 'pg_alter_table_alter_column_set_type'
			&& dialect === 'postgresql'
		);
	}

	convert(statement: JsonAlterColumnPgTypeStatement) {
		const { tableName, columnName, newDataType, schema, oldDataType, columnDefault, typeSchema } = statement;

		const tableNameWithSchema = schema
			? `"${schema}"."${tableName}"`
			: `"${tableName}"`;

		const statements: string[] = [];

		const type = parseType(`"${typeSchema}".`, newDataType.name);

		if (!oldDataType.isEnum && !newDataType.isEnum) {
			statements.push(
				`ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DATA TYPE ${type};`,
			);
			if (columnDefault) {
				statements.push(
					`ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DEFAULT ${columnDefault};`,
				);
			}
		}

		if (oldDataType.isEnum && !newDataType.isEnum) {
			statements.push(
				`ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DATA TYPE ${type};`,
			);
			if (columnDefault) {
				statements.push(
					`ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DEFAULT ${columnDefault};`,
				);
			}
		}

		if (!oldDataType.isEnum && newDataType.isEnum) {
			if (columnDefault) {
				statements.push(
					`ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DEFAULT ${columnDefault}::${type};`,
				);
			}
			statements.push(
				`ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DATA TYPE ${type} USING "${columnName}"::${type};`,
			);
		}

		if (oldDataType.isEnum && newDataType.isEnum) {
			const alterType =
				`ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DATA TYPE ${type} USING "${columnName}"::text::${type};`;

			if (newDataType.name !== oldDataType.name && columnDefault) {
				statements.push(
					`ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" DROP DEFAULT;`,
					alterType,
					`ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DEFAULT ${columnDefault};`,
				);
			} else {
				statements.push(alterType);
			}
		}

		return statements;
	}
}

Domain

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free