Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelstonis committed Dec 18, 2024
2 parents d556026 + c018749 commit e7c8814
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 0 deletions.
14 changes: 14 additions & 0 deletions TychoDB/Queries.cs
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,20 @@ FROM JsonValue
Partition = $partition
""";

public const string DeleteDataFromJsonValueWithPartition =
"""
DELETE
FROM JsonValue
Where
Partition = $partition
""";

public const string DeleteDataFromJsonValue =
"""
DELETE
FROM JsonValue
""";

public const string DeleteDataFromStreamValueWithKey =
"""
DELETE
Expand Down
94 changes: 94 additions & 0 deletions TychoDB/Tycho.cs
Original file line number Diff line number Diff line change
Expand Up @@ -778,6 +778,100 @@ public ValueTask<int> DeleteObjectsAsync<T>(string partition = null, FilterBuild
filter.Build(commandBuilder, _jsonSerializer);
}

#pragma warning disable CA2100 // Review SQL queries for security vulnerabilities
deleteCommand.CommandText = commandBuilder.ToString();
#pragma warning restore CA2100 // Review SQL queries for security vulnerabilities

var deletionCount = deleteCommand.ExecuteNonQuery();

transaction?.Commit();

return deletionCount;
}
catch (Exception ex)
{
transaction?.Rollback();
throw new TychoException("Failed to delete objects", ex);
}
finally
{
transaction?.Dispose();
}
},
_persistConnection,
cancellationToken);
}

public ValueTask<int> DeleteObjectsAsync(string partition, bool withTransaction = true, CancellationToken cancellationToken = default)
{
return _connection
.WithConnectionBlockAsync(
_rateLimiter,
conn =>
{
SqliteTransaction transaction = null;

if (withTransaction)
{
transaction = conn.BeginTransaction(IsolationLevel.Serializable);
}

try
{
using var deleteCommand = conn.CreateCommand();

var commandBuilder = ReusableStringBuilder;

commandBuilder.Append(Queries.DeleteDataFromJsonValueWithPartition);

deleteCommand.Parameters.Add(ParameterPartition, SqliteType.Text).Value = partition.AsValueOrEmptyString();

#pragma warning disable CA2100 // Review SQL queries for security vulnerabilities
deleteCommand.CommandText = commandBuilder.ToString();
#pragma warning restore CA2100 // Review SQL queries for security vulnerabilities

var deletionCount = deleteCommand.ExecuteNonQuery();

transaction?.Commit();

return deletionCount;
}
catch (Exception ex)
{
transaction?.Rollback();
throw new TychoException("Failed to delete objects", ex);
}
finally
{
transaction?.Dispose();
}
},
_persistConnection,
cancellationToken);
}

public ValueTask<int> DeleteObjectsAsync(bool withTransaction = true, CancellationToken cancellationToken = default)
{
return _connection
.WithConnectionBlockAsync(
_rateLimiter,
conn =>
{
SqliteTransaction transaction = null;

if (withTransaction)
{
transaction = conn.BeginTransaction(IsolationLevel.Serializable);
}

try
{
using var deleteCommand = conn.CreateCommand();

var commandBuilder = ReusableStringBuilder;

commandBuilder.Append(Queries.DeleteDataFromJsonValue);

#pragma warning disable CA2100 // Review SQL queries for security vulnerabilities
deleteCommand.CommandText = commandBuilder.ToString();
#pragma warning restore CA2100 // Review SQL queries for security vulnerabilities
Expand Down

0 comments on commit e7c8814

Please sign in to comment.