Skip to content

Commit d494fcc

Browse files
authored
feat: lock modes in cockroachdb (typeorm#8250)
closes typeorm#8249
1 parent 4e7d32f commit d494fcc

File tree

4 files changed

+193
-108
lines changed

4 files changed

+193
-108
lines changed

docs/find-options.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ Support of lock modes, and SQL statements they translate to, are listed in the t
239239
| Oracle | FOR UPDATE | FOR UPDATE | (nothing) | | | |
240240
| SQL Server | WITH (HOLDLOCK, ROWLOCK) | WITH (UPDLOCK, ROWLOCK) | WITH (NOLOCK) | | | |
241241
| AuroraDataApi | LOCK IN SHARE MODE | FOR UPDATE | (nothing) | | | |
242+
| CockroachDB | | FOR UPDATE | (nothing) | | FOR UPDATE NOWAIT | FOR NO KEY UPDATE |
242243
243244
```
244245

src/query-builder/SelectQueryBuilder.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1702,7 +1702,7 @@ export class SelectQueryBuilder<Entity> extends QueryBuilder<Entity> implements
17021702
let lockTablesClause = "";
17031703

17041704
if (this.expressionMap.lockTables) {
1705-
if (!(driver instanceof PostgresDriver)) {
1705+
if (!(driver instanceof PostgresDriver || driver instanceof CockroachDriver)) {
17061706
throw new TypeORMError("Lock tables not supported in selected driver");
17071707
}
17081708
if (this.expressionMap.lockTables.length < 1) {
@@ -1733,7 +1733,7 @@ export class SelectQueryBuilder<Entity> extends QueryBuilder<Entity> implements
17331733
return " FOR UPDATE";
17341734

17351735
}
1736-
else if (driver instanceof PostgresDriver ) {
1736+
else if (driver instanceof PostgresDriver || driver instanceof CockroachDriver) {
17371737
return " FOR UPDATE" + lockTablesClause;
17381738

17391739
} else if (driver instanceof SqlServerDriver) {
@@ -1753,7 +1753,7 @@ export class SelectQueryBuilder<Entity> extends QueryBuilder<Entity> implements
17531753
throw new LockNotSupportedOnGivenDriverError();
17541754
}
17551755
case "pessimistic_write_or_fail":
1756-
if (driver instanceof PostgresDriver) {
1756+
if (driver instanceof PostgresDriver || driver instanceof CockroachDriver) {
17571757
return " FOR UPDATE" + lockTablesClause + " NOWAIT";
17581758

17591759
} else if (driver instanceof MysqlDriver) {
@@ -1764,7 +1764,7 @@ export class SelectQueryBuilder<Entity> extends QueryBuilder<Entity> implements
17641764
}
17651765

17661766
case "for_no_key_update":
1767-
if (driver instanceof PostgresDriver) {
1767+
if (driver instanceof PostgresDriver || driver instanceof CockroachDriver) {
17681768
return " FOR NO KEY UPDATE" + lockTablesClause;
17691769
} else {
17701770
throw new LockNotSupportedOnGivenDriverError();

0 commit comments

Comments
 (0)