internal static bool AddOrUpdate(SqlTable table, ref object[] allColumnValues, bool lazy)
{
if(table != null && allColumnValues != null && allColumnValues.Length > 0) {
try {
Debug.Assert(allColumnValues.Length == (table.primaryKeyHeaders?.Length ?? 0) + (table.additionalKeyHeaders?.Length ?? 0));
NullNullableDefaultValues(table, ref allColumnValues);
string[] vars = GetVars((table.primaryKeyHeaders?.Length ?? 0) + (table.additionalKeyHeaders?.Length ?? 0));
string sql = "insert into " + table.tableName;
sql += " (" + table.primaryKeyHeaders.Append(table.additionalKeyHeaders).ToCsv();
sql += ") values (" + vars.ToCsv(",", "?") + ")";
sql += " ON DUPLICATE KEY UPDATE ";
string[] keyValues = table.additionalKeyHeaders?.AppendStrings(vars.SubArray((uint)(table.primaryKeyHeaders?.Length ?? 0)), "=?");
sql += keyValues.ToCsv();
return ExecuteNonQuery(sql, allColumnValues) == 1;
} catch(Exception e) {
Log.exception(e);
}
}
Debug.Fail();
return false;
}