addOperation method

OpResult? addOperation(
  1. OperationType operationType,
  2. dynamic parent,
  3. String? columnName,
  4. dynamic children, [
  5. String? parentTable,
])

Implementation

OpResult? addOperation(OperationType operationType, dynamic parent,
    String? columnName, dynamic children,
    [String? parentTable]) {
  dynamic localParent;
  String localTable;
  dynamic localChildren;
  String? localWhereClause;

  if (parent is Map) {
    localParent = parent['objectId'];
    localTable = parentTable!;
  } else if (parent is String) {
    localParent = parent;
    localTable = parentTable!;
  } else if (parent is OpResult) {
    localParent = parent.resolveTo(propName: 'objectId').makeReference();
    localTable = parent.tableName;
  } else if (parent is OpResultValueReference) {
    localParent =
        TransactionHelper.convertCreateBulkOrFindResultIndexToObjectId(
            parent);
    localTable = parent.opResult.tableName;
  } else if (reflector.canReflect(parent)) {
    localParent = parent.objectId;
    localTable = reflector.getServerName(parent.runtimeType)!;
  } else {
    throw ArgumentError(
        "The value should be either Custom class object, Map, Id, OpResult or OpResultValueReference");
  }

  if (children is List) {
    localWhereClause = null;
    if (children[0] is String) {
      localChildren = children;
    } else if (children[0] is Map) {
      localChildren = children.map((e) => e['objectId']).toList();
    } else if (reflector.canReflect(children[0])) {
      localChildren = children.map((e) => e.objectId).toList();
    } else {
      throw ArgumentError(
          'The children argument should be the list of IDs, Maps or Custom class objects');
    }
  } else if (children is OpResult) {
    localChildren = children.makeReference();
    localWhereClause = null;
  } else if (children is String) {
    localChildren = null;
    localWhereClause = children;
  } else {
    throw ArgumentError(
        'The children argument should be either List, OpResult or whereClause');
  }

  return _addOperation(operationType, localTable, localParent, columnName,
      localWhereClause, localChildren);
}