doInsertRelationshipSQL method

  1. @override
FutureOr doInsertRelationshipSQL(
  1. String entityName,
  2. String table,
  3. SQL sql,
  4. Transaction transaction,
  5. DBSQLMemoryAdapterContext connection,
)
override

Implementation

@override
FutureOr doInsertRelationshipSQL(String entityName, String table, SQL sql,
    Transaction transaction, DBSQLMemoryAdapterContext connection) {
  if (sql.isDummy) return null;

  var entry = _normalizeEntityJSON(
      sql.namedParameters ?? sql.parametersByPlaceholder,
      entityName: entityName,
      table: table);

  var map = _getTableMap(table, true, relationship: true)!;

  var prevEntry =
      map.entries.firstWhereOrNull((e) => isEqualsDeep(e.value, entry));
  if (prevEntry != null) {
    return prevEntry.key;
  }

  var id = nextID(table);
  map[id] = entry;

  for (var e in entry.entries) {
    var field = e.key;
    var value = e.value;
    _indexAddEntry(table, id, field, value);
  }

  _onTablesModification();
  return id;
}