| 408 | options: CreateRowOptions<table, relations>, |
| 409 | ): Promise<TableRowWith<table, LoadedRelationMap<relations>>> |
| 410 | async create< |
| 411 | table extends AnyTable, |
| 412 | relations extends RelationMapForSourceName<TableName<table>> = {}, |
| 413 | >( |
| 414 | table: table, |
| 415 | values: Partial<TableRow<table>>, |
| 416 | options?: CreateResultOptions | CreateRowOptions<table, relations>, |
| 417 | ): Promise<WriteResult | TableRowWith<table, LoadedRelationMap<relations>>> { |
| 418 | let touch = options?.touch |
| 419 | let query: QueryForTable<table> = this.query(asQueryTableInput(table)) |
| 420 | |
| 421 | if (options?.returnRow !== true) { |
| 422 | let result = await query.insert(values, { touch }) |
| 423 | return toWriteResult(result) |
| 424 | } |
| 425 | |
| 426 | if (this.#adapter.capabilities.returning) { |
| 427 | let result = (await query.insert(values, { |
| 428 | returning: '*', |
| 429 | touch, |
| 430 | })) as { row: TableRow<table> | null } |
| 431 | let row = result.row |
| 432 | |
| 433 | if (!row) { |
| 434 | throw new DataTableQueryError( |
| 435 | 'create({ returnRow: true }) failed to return an inserted row', |
| 436 | ) |
| 437 | } |
| 438 | |
| 439 | if (!options.with) { |
| 440 | return row as TableRowWith<table, LoadedRelationMap<relations>> |
| 441 | } |
| 442 | |
| 443 | let where = getPrimaryKeyWhereFromRow(table, row) |
| 444 | let loaded = await this.findOne(table, { |
| 445 | where, |
| 446 | with: options.with, |
| 447 | }) |
| 448 | |
| 449 | if (!loaded) { |
| 450 | throw new DataTableQueryError('create({ returnRow: true }) failed to load inserted row') |
| 451 | } |
| 452 | |
| 453 | return loaded |
| 454 | } |
| 455 | |
| 456 | let insertResult = await query.insert(values, { touch }) |
| 457 | let where = resolveCreateRowWhere(table, values, toWriteResult(insertResult).insertId) |
| 458 | let loaded = await this.findOne(table, { |
| 459 | where, |
| 460 | with: options.with, |
| 461 | }) |
| 462 | |
| 463 | if (!loaded) { |
| 464 | throw new DataTableQueryError('create({ returnRow: true }) failed to load inserted row') |
| 465 | } |
| 466 | |
| 467 | return loaded |