public static JSONArray ExecuteQuerySync(string sql, Dictionary <string, object> parameters, bool useTransaction) { #if !UNITY_EDITOR // Force transaction if it is an update, insert or delete. if (GAUtilities.StringMatch(sql.ToUpperInvariant(), "^(UPDATE|INSERT|DELETE)")) { useTransaction = true; } // Get database connection from singelton sharedInstance SqliteConnection sqlDatabasePtr = Instance.SqlDatabase; // Create mutable array for results JSONArray results = new JSONArray(); SqliteCommand command = null; try { if (useTransaction) { sqlDatabasePtr.BeginTransaction(); } command = sqlDatabasePtr.CreateCommand(); command.CommandText = sql; // Bind parameters if (parameters.Count != 0) { foreach (KeyValuePair <string, object> pair in parameters) { command.Bind(pair.Key, pair.Value); } } // Loop through results foreach (List <Tuple <string, string> > reader in command.ExecuteQueryMY()) { // get columns count int columnCount = reader.Count; JSONClass row = new JSONClass(); for (int i = 0; i < columnCount; i++) { string column = reader[i].Item1; if (string.IsNullOrEmpty(column)) { continue; } row[column] = reader[i].Item2.ToString(); } results.Add(row); } if (useTransaction) { //transaction.Commit(); sqlDatabasePtr.Commit(); } } catch (SqliteException e) { // TODO(nikolaj): Should we do a db validation to see if the db is corrupt here? GALogger.E("SQLITE3 ERROR: " + e); results = null; } finally { } // Return results return(results); #else return(null); #endif }