start-transaction-query.test.ts 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { TransactionType } from '@sequelize/core';
  2. import { buildInvalidOptionReceivedError } from '@sequelize/core/_non-semver-use-at-your-own-risk_/utils/check.js';
  3. import { expectsql, sequelize } from '../../support';
  4. const dialect = sequelize.dialect;
  5. const notSupportedError = new Error(
  6. `startTransactionQuery is not supported by the ${dialect.name} dialect.`,
  7. );
  8. describe('QueryGenerator#startTransactionQuery', () => {
  9. const queryGenerator = sequelize.queryGenerator;
  10. it('should generate a query for starting a transaction', () => {
  11. expectsql(() => queryGenerator.startTransactionQuery(), {
  12. default: 'START TRANSACTION',
  13. sqlite3: 'BEGIN DEFERRED TRANSACTION',
  14. 'db2 ibmi mssql': notSupportedError,
  15. });
  16. });
  17. it('should generate a query for starting a transaction with a name', () => {
  18. expectsql(() => queryGenerator.startTransactionQuery({ transactionName: 'myTransaction' }), {
  19. default: 'START TRANSACTION',
  20. snowflake: 'START TRANSACTION NAME "myTransaction"',
  21. sqlite3: 'BEGIN DEFERRED TRANSACTION',
  22. 'db2 ibmi mssql': notSupportedError,
  23. });
  24. });
  25. it('should generate a query for starting a read-only transaction', () => {
  26. expectsql(() => queryGenerator.startTransactionQuery({ readOnly: true }), {
  27. default: buildInvalidOptionReceivedError('startTransactionQuery', dialect.name, ['readOnly']),
  28. 'db2 ibmi mssql': notSupportedError,
  29. 'mariadb mysql postgres': 'START TRANSACTION READ ONLY',
  30. });
  31. });
  32. it('should generate a query for starting a deferred transaction', () => {
  33. expectsql(
  34. () => queryGenerator.startTransactionQuery({ transactionType: TransactionType.DEFERRED }),
  35. {
  36. default: buildInvalidOptionReceivedError('startTransactionQuery', dialect.name, [
  37. 'transactionType',
  38. ]),
  39. sqlite3: 'BEGIN DEFERRED TRANSACTION',
  40. 'db2 ibmi mssql': notSupportedError,
  41. },
  42. );
  43. });
  44. it('should generate a query for starting an immediate transaction', () => {
  45. expectsql(
  46. () => queryGenerator.startTransactionQuery({ transactionType: TransactionType.IMMEDIATE }),
  47. {
  48. default: buildInvalidOptionReceivedError('startTransactionQuery', dialect.name, [
  49. 'transactionType',
  50. ]),
  51. sqlite3: 'BEGIN IMMEDIATE TRANSACTION',
  52. 'db2 ibmi mssql': notSupportedError,
  53. },
  54. );
  55. });
  56. it('should generate a query for starting an exclusive transaction', () => {
  57. expectsql(
  58. () => queryGenerator.startTransactionQuery({ transactionType: TransactionType.EXCLUSIVE }),
  59. {
  60. default: buildInvalidOptionReceivedError('startTransactionQuery', dialect.name, [
  61. 'transactionType',
  62. ]),
  63. sqlite3: 'BEGIN EXCLUSIVE TRANSACTION',
  64. 'db2 ibmi mssql': notSupportedError,
  65. },
  66. );
  67. });
  68. it('should generate a query for starting a transaction with all options', () => {
  69. expectsql(
  70. () =>
  71. queryGenerator.startTransactionQuery({
  72. readOnly: true,
  73. transactionName: 'myTransaction',
  74. transactionType: TransactionType.EXCLUSIVE,
  75. }),
  76. {
  77. default: buildInvalidOptionReceivedError('startTransactionQuery', dialect.name, [
  78. 'transactionType',
  79. ]),
  80. 'snowflake sqlite3': buildInvalidOptionReceivedError(
  81. 'startTransactionQuery',
  82. dialect.name,
  83. ['readOnly'],
  84. ),
  85. 'db2 ibmi mssql': notSupportedError,
  86. },
  87. );
  88. });
  89. });