set method
- T data,
- [SetOptions? options,
- dynamic transObj]
Sets the data for the document, optionally merging.
Parameters:
data: The data to set.options: Optional set options (merge, etc.).transObj: Optional transaction object.
Returns: A Future that completes when the set is done.
Example:
await docRef.set({'name': 'John'}, SetOptions(merge: true));
Implementation
Future<void> set(T data, [SetOptions? options, dynamic transObj]) async {
if (toConverter != null) {
data = toConverter(data);
}
if (options == null) {
options = SetOptions(merge: false);
}
if (transObj == null) {
transObj = {"name": "", "start": 0, "end": 0};
}
;
FusabaseAuth auth = FusabaseAuth.instanceFor(app: this._oracledb.app);
dynamic finalData = convertMap(data as Map<Object, Object?>);
String? accessToken = await getAccessToken(auth);
if (checkOracledbApiVersion(
_oracledb.app.options,
OracledbVersion["VERSION_1"] ?? 1,
)) {
if (options != null &&
(options.merge == true ||
(options.mergeFields != null &&
options.mergeFields!.isNotEmpty))) {
dynamic docData;
try {
docData = await get(null, {
"name": transObj["name"],
"start": transObj["start"],
"end": 0,
"version": transObj["version"],
});
if (transObj["start"] == 1) {
transObj["start"] = 0;
}
} catch (e) {
final error = Exception("No such doc exists!");
throw error;
}
finalData = updateNestedData(
this,
docData._data,
convertMap(finalData),
);
} else {
finalData = setWholeData(this, {}, convertMap(finalData), false);
}
finalData = parseTimestamp(finalData);
} else if (checkOracledbApiVersion(
_oracledb.app.options,
OracledbVersion["VERSION_2"] ?? 2,
)) {
if (options != null && options.merge == true) {
finalData = createPayloadForUpdateVersion2New(
this,
finalData,
options.merge ?? true,
);
} else {
finalData = setWholeData(this, {}, convertMap(finalData), true);
finalData = serializeVersion2(this, finalData, false);
}
finalData = parseTimestamp(finalData);
finalData = rearrangeBodyOfVersion2(finalData);
}
dynamic result = await _helper.setdoc(
client: createClient(_oracledb.app),
docRef: this,
data: finalData,
logLevel: this.__logLevel,
accessToken: accessToken,
options: options,
transObj: transObj,
);
if (result["OID"] == null) {
throw Utils.oracledbErrorHandler(500, "setDoc failed!", null);
}
return;
}