public void Delete(Sql sql, Connection db, Action<int> callback = null) { ExecuteNonQuery(sql, db, callback); }
public void ExecuteNonQuery(Sql sql, Connection db, Action<int> callback = null) { var query = new SQLiteQuery { Sql = sql, Connection = db, CallbackNonQuery = callback, NonQuery = true }; lock (_syncroot) _queue.Enqueue(query); _workevent.Set(); }
public void CloseDb(Connection db) { if (db == null) return; _connections.Remove(db.ConnectionString); if (db.Plugin != null && _connections.Values.All(c => c.Plugin != db.Plugin)) { Event.Callback<Plugin, PluginManager> event_callback; if (_pluginRemovedFromManager.TryGetValue(db.Plugin, out event_callback)) { event_callback.Remove(); _pluginRemovedFromManager.Remove(db.Plugin); } } db.Con?.Close(); db.Plugin = null; }
public void Query(Sql sql, Connection db, Action<List<Dictionary<string, object>>> callback) { var query = new SQLiteQuery { Sql = sql, Connection = db, Callback = callback }; lock (_syncroot) _queue.Enqueue(query); _workevent.Set(); }
public Connection OpenDb(string file, Plugin plugin, bool persistent = false) { if (string.IsNullOrEmpty(file)) return null; var filename = Path.Combine(_dataDirectory, file); if (!filename.StartsWith(_dataDirectory, StringComparison.Ordinal)) throw new Exception("Only access to oxide directory!"); var conStr = $"Data Source={filename};Version=3;"; Connection connection; if (_connections.TryGetValue(conStr, out connection)) { if (plugin != connection.Plugin) { Interface.Oxide.LogWarning("Already open connection ({0}), by plugin '{1}'...", conStr, connection.Plugin); return null; } Interface.Oxide.LogWarning("Already open connection ({0}), using existing instead...", conStr); } else { connection = new Connection(conStr, persistent) { Plugin = plugin, Con = new SQLiteConnection(conStr) }; _connections[conStr] = connection; } if (plugin != null && !_pluginRemovedFromManager.ContainsKey(plugin)) _pluginRemovedFromManager[plugin] = plugin.OnRemovedFromManager.Add(OnRemovedFromManager); return connection; }