Browse Source

fix(nocodb): fail to update records with multiple primary keys

pull/4385/head
Wing-Kam Wong 2 years ago
parent
commit
862fe8815f
  1. 26
      packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts

26
packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts

@ -97,7 +97,7 @@ class BaseModelSqlv2 {
await this.selectObject({ qb }); await this.selectObject({ qb });
qb.where(this.model.primaryKey.column_name, id); qb.where(_wherePk(this.model.primaryKeys, id));
const data = (await this.extractRawQueryAndExec(qb))?.[0]; const data = (await this.extractRawQueryAndExec(qb))?.[0];
@ -390,7 +390,7 @@ class BaseModelSqlv2 {
dbDriver: this.dbDriver, dbDriver: this.dbDriver,
}); });
await parentTable.getColumns(); await parentTable.getColumns();
const childTn = this.getTnPath(childTable); const childTn = this.getTnPath(childTable);
const parentTn = this.getTnPath(parentTable); const parentTn = this.getTnPath(parentTable);
@ -1628,9 +1628,9 @@ class BaseModelSqlv2 {
private getTnPath(tb: Model) { private getTnPath(tb: Model) {
const schema = (this.dbDriver as any).searchPath?.(); const schema = (this.dbDriver as any).searchPath?.();
const table = const table =
this.isMssql && schema this.isMssql && schema
? this.dbDriver.raw('??.??', [schema, tb.table_name]) ? this.dbDriver.raw('??.??', [schema, tb.table_name])
: tb.table_name; : tb.table_name;
return table; return table;
} }
@ -1826,12 +1826,16 @@ class BaseModelSqlv2 {
// refer : https://www.sqlite.org/limits.html // refer : https://www.sqlite.org/limits.html
const chunkSize = this.isSqlite ? 10 : _chunkSize; const chunkSize = this.isSqlite ? 10 : _chunkSize;
const response = (this.isPg || this.isMssql) ? const response =
await this.dbDriver this.isPg || this.isMssql
.batchInsert(this.model.table_name, insertDatas, chunkSize) ? await this.dbDriver
.returning(this.model.primaryKey?.column_name) : .batchInsert(this.model.table_name, insertDatas, chunkSize)
await this.dbDriver .returning(this.model.primaryKey?.column_name)
.batchInsert(this.model.table_name, insertDatas, chunkSize); : await this.dbDriver.batchInsert(
this.model.table_name,
insertDatas,
chunkSize
);
await this.afterBulkInsert(insertDatas, this.dbDriver, cookie); await this.afterBulkInsert(insertDatas, this.dbDriver, cookie);

Loading…
Cancel
Save