/// <summary> /// Insert wrapper for multiple rows, should be able to do single rows too /// </summary> /// <param name="table">Name of the table where the data is inserted</param> /// <param name="parameters">List of dictionaries each representing a row to be inserted</param> /// <param name="callback">FiveM callback function</param> /// <param name="lastInsertId">return the last insert id if true, otherwise affected rows</param> private async void Insert(string table, dynamic parameters, CallbackDelegate callback = null, bool lastInsertId = false) { await Initialized(); MultiRowCommandBuilder multiRow = await ParseMultiRow(table, parameters); bool isInsert = (callback == null) ? false : lastInsertId; Task <long> resultTask = mysql.Query(multiRow.CommandText, multiRow.Parameters, isInsert); #pragma warning disable CS4014 resultTask.ContinueWith((task) => callback?.Invoke(task.Result)); #pragma warning restore CS4014 }
/// <summary> /// Parsing MultiRow with the TaskScheduler to avoid hitches /// </summary> /// <param name="table">Name of the table</param> /// <param name="parameters">List of dictionarys which represent each row inserted</param> /// <returns>Returns the MultiRow object which consists of a built query string and a set of parameters</returns> private async Task <MultiRowCommandBuilder> ParseMultiRow(string table, dynamic parameters) => await Task.Factory.StartNew(() => { return(MultiRowCommandBuilder.TryParse(table, parameters)); }, CancellationToken.None, TaskCreationOptions.None, taskScheduler);