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;
}