private void AddPreparedStatement(WorldPreparedStatement id, string query, params MySqlDbType[] types) { Debug.Assert(types.Length == query.Count(c => c == '?')); Debug.Assert(query.Length != 0); try { using (var connection = new MySqlConnection(connectionString)) { connection.Open(); using (var command = new MySqlCommand(query, connection)) { for (uint i = 0; i < types.Length; i++) { command.Parameters.Add("", types[i]); } command.Prepare(); preparedStatements.Add(id, new PreparedStatement(id, query, types)); } } } catch (Exception exception) { LogManager.Write("Database", $"An exception occured while preparing statement {id}!"); LogManager.Write("Database", $"Exception: {exception.Message}"); Debug.Assert(false); } }
private uint GetMaxId(WorldPreparedStatement id, uint min, uint max) { object[] critera = new object[] { min, max }; MySqlResult res = SelectPreparedStatement <WorldPreparedStatement>(id, critera); var ret = res.Rows[0][0]; if (ret is DBNull) { return(uint.MaxValue); } return((uint)res.Rows[0][0]); }
private async Task <MySqlResult> SelectPreparedStatementAsync(WorldPreparedStatement id, params object[] parameters) { PreparedStatement preparedStatement; if (!preparedStatements.TryGetValue(id, out preparedStatement)) { Debug.Assert(preparedStatement != null); return(null); } Debug.Assert(preparedStatement.Types.Count == parameters.Length); try { using (var connection = new MySqlConnection(connectionString)) { using (var command = new MySqlCommand(preparedStatement.Query, connection)) { for (int i = 0; i < preparedStatement.Types.Count; i++) { command.Parameters.Add("", preparedStatement.Types[i]).Value = parameters[i]; } await connection.OpenAsync(); return(await Task.Run(() => { using (MySqlDataReader commandReader = command.ExecuteReader(CommandBehavior.Default)) { using (var result = new MySqlResult()) { result.Load(commandReader); result.Count = (uint)result.Rows.Count; return result; } } })); } } } catch (Exception exception) { LogManager.Write("Database", $"An exception occured while selecting prepared statement {id}!"); LogManager.Write("Database", $"Exception: {exception.Message}"); } return(null); }
private async Task <int> ExecutePreparedStatementAsync(WorldPreparedStatement id, params object[] parameters) { PreparedStatement preparedStatement; if (!preparedStatements.TryGetValue(id, out preparedStatement)) { Debug.Assert(preparedStatement != null); return(-1); } Debug.Assert(preparedStatement.Types.Count == parameters.Length); try { using (var connection = new MySqlConnection(connectionString)) { using (var command = new MySqlCommand(preparedStatement.Query, connection)) { for (int i = 0; i < preparedStatement.Types.Count; i++) { command.Parameters.Add("", preparedStatement.Types[i]).Value = parameters[i]; } await connection.OpenAsync(); return(await Task.Run(() => command.ExecuteNonQuery())); // by default ExecuteNonQueryAsync is blocking } } } catch (MySqlException exception) { LogManager.Write("Database", $"An exception occured while executing prepared statement {id}!"); LogManager.Write("Database", $"Exception: {exception.Message}"); } return(-1); }
private void ConstructMaxQueryStatement(WorldPreparedStatement id, string tableName, string columnName) { // NOTE: when moved to WordDatabase, ace_shard needs to be changed to ace_world AddPreparedStatement(id, $"SELECT MAX(`{columnName}`) FROM `{tableName}` WHERE `{columnName}` >= ? && `{columnName}` < ?", MySqlDbType.UInt32, MySqlDbType.UInt32); }
public PreparedStatement(WorldPreparedStatement id, string query, params MySqlDbType[] types) { Id = id; Query = query; Types.AddRange(types); }