1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import { QueryTypes } from '@sequelize/core';
- import { expect } from 'chai';
- import {
- createSingleTransactionalTestSequelizeInstance,
- getTestDialect,
- sequelize,
- setResetMode,
- } from '../support';
- const dialectName = getTestDialect();
- describe('sequelize.setSessionVariables', () => {
- if (!['mysql', 'mariadb'].includes(dialectName)) {
- return;
- }
- setResetMode('none');
- it(`rejects if no connection or transaction is provided`, async () => {
- await expect(sequelize.setSessionVariables({ foo: 'bar' })).to.be.rejectedWith(
- Error,
- 'specify either options.transaction or options.connection',
- );
- });
- it('supports CLS transactions', async () => {
- const clsSequelize = await createSingleTransactionalTestSequelizeInstance(sequelize, {
- disableClsTransactions: false,
- });
- await clsSequelize.transaction(async () => {
- await clsSequelize.setSessionVariables({ foo: 'bar' });
- const [data] = await clsSequelize.query<{ foo: string }>('SELECT @foo as `foo`', {
- type: QueryTypes.SELECT,
- });
- expect(data).to.be.ok;
- expect(data.foo).to.equal('bar');
- });
- });
- it('supports manual transactions', async () => {
- const transaction = await sequelize.startUnmanagedTransaction();
- try {
- await sequelize.setSessionVariables({ foo: 'bar' }, { transaction });
- const [data] = await sequelize.query<{ foo: string }>('SELECT @foo as `foo`', {
- type: QueryTypes.SELECT,
- transaction,
- });
- expect(data).to.be.ok;
- expect(data.foo).to.equal('bar');
- await transaction.commit();
- } catch (error) {
- await transaction.rollback();
- throw error;
- }
- });
- it('supports connections', async () => {
- await sequelize.withConnection(async connection => {
- await sequelize.setSessionVariables({ foo: 'bar' }, { connection });
- const [data] = await sequelize.query<{ foo: string }>('SELECT @foo as `foo`', {
- type: QueryTypes.SELECT,
- connection,
- });
- expect(data).to.be.ok;
- expect(data.foo).to.equal('bar');
- });
- });
- it('supports setting multiple values', async () => {
- await sequelize.withConnection(async connection => {
- await sequelize.setSessionVariables({ foo: 'bar', foos: 'bars' }, { connection });
- const [data] = await sequelize.query<{ foo: string; foos: string }>(
- 'SELECT @foo as `foo`, @foos as `foos`',
- { type: QueryTypes.SELECT, connection },
- );
- expect(data).to.be.ok;
- expect(data.foo).to.equal('bar');
- expect(data.foos).to.equal('bars');
- });
- });
- });
|