function createSetNullableMigration(table, column, options = {}) {
    return createTransactionalMigration(
        async function up(knex) {
            logging.info(`Setting nullable: ${table}.${column}`);
            await commands.setNullable(table, column, knex);
        },
        async function down(knex) {
            if (DatabaseInfo.isSQLite(knex)) {
                options.disableForeignKeyChecks = false;
            }
            logging.info(`Dropping nullable:  ${table}.${column}${options.disableForeignKeyChecks ? ' with foreign keys disabled' : ''}`);
            if (options.disableForeignKeyChecks) {
                await knex.raw('SET FOREIGN_KEY_CHECKS=0;').transacting(knex);
            }

            try {
                await commands.dropNullable(table, column, knex);
            } finally {
                if (options.disableForeignKeyChecks) {
                    await knex.raw('SET FOREIGN_KEY_CHECKS=1;').transacting(knex);
                }
            }
        }
    );
}
@param {string} table
@param {string} column
@param {Object} options
@param {boolean} options.disableForeignKeyChecks Disable foreign key checks for the down operation (when dropping nullable)
@returns {Migration}