Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

…lines 1–293 unchanged (293 lines)
294
295 ICollection<(Type Type, Func<IAsyncEnumerable<object>> ValueFactory)> entityTypes = [
296 .. typeof(JellyfinDbContext)
297 .GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
298 .Where(e => e.PropertyType.IsAssignableTo(typeof(IQueryable)))
299 .Select(e => (Type: e.PropertyType, ValueFactory: new Func<IAsyncEnumerable<object>>(() => GetValues((IQueryable)e.GetValue(dbContext)!, e.PropertyType)))),
300 (Type: typeof(HistoryRow), ValueFactory: new Func<IAsyncEnumerable<object>>(() => migrations.ToAsyncEnumerable()))
301 ];
302 manifest.DatabaseTables = entityTypes.Select(e => e.Type.Name).ToArray();
303 var transaction = await dbContext.Database.BeginTransactionAsync().ConfigureAwait(false);
304
305 await using (transaction.ConfigureAwait(false))
306 {
307 _logger.LogInformation("Begin Database backup");
308
309 foreach (var entityType in entityTypes)
310 {
311 _logger.LogInformation("Begin backup of entity {Table}", entityType.Type.Name);
312 var zipEntry = zipArchive.CreateEntry($"Database\\{entityType.Type.Name}.json");
313 var entities = 0;
314 var zipEntryStream = zipEntry.Open();
315 await using (zipEntryStream.ConfigureAwait(false))
316 {
317 var jsonSerializer = new Utf8JsonWriter(zipEntryStream);
…lines 318–513 unchanged (196 lines)

After

…lines 1–293 unchanged (293 lines)
294
295 ICollection<(Type Type, Func<IAsyncEnumerable<object>> ValueFactory)> entityTypes = [
296 .. typeof(JellyfinDbContext)
297 .GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
298 .Where(e => e.PropertyType.IsAssignableTo(typeof(IQueryable)))
299 .Select(e => (Type: e.PropertyType, ValueFactory: new Func<IAsyncEnumerable<object>>(() => GetValues((IQueryable)e.GetValue(dbContext)!, e.PropertyType)))),
300 (Type: typeof(IQueryable<HistoryRow>), ValueFactory: new Func<IAsyncEnumerable<object>>(() => migrations.ToAsyncEnumerable()))
301 ];
302 manifest.DatabaseTables = entityTypes.Select(e => e.Type.Name).ToArray();
303 var transaction = await dbContext.Database.BeginTransactionAsync().ConfigureAwait(false);
304
305 await using (transaction.ConfigureAwait(false))
306 {
307 _logger.LogInformation("Begin Database backup");
308
309 foreach (var entityType in entityTypes)
310 {
311 var schemaName = dbContext.Model.FindEntityType(entityType.Type.GetGenericArguments()[0])!.GetSchemaQualifiedTableName()!;
312 _logger.LogInformation("Begin backup of entity {Table}", entityType.Type.Name);
313 var zipEntry = zipArchive.CreateEntry($"Database\\{entityType.Type.Name}.json");
314 var entities = 0;
315 var zipEntryStream = zipEntry.Open();
316 await using (zipEntryStream.ConfigureAwait(false))
317 {
…lines 318–514 unchanged (197 lines)

Before

compilation_unit
using_directive
using "using"
identifier "System"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "Collections"
. "."
identifier "Generic"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "IO"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "IO"
. "."
identifier "Compression"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Linq"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "Text"
. "."
identifier "Json"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "System"
. "."
identifier "Text"
. "."
identifier "Json"
. "."
identifier "Nodes"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "System"
. "."
identifier "Text"
. "."
identifier "Json"
. "."
identifier "Serialization"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Threading"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "Threading"
. "."
identifier "Tasks"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Database"
. "."
identifier "Implementations"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "Implementations"
. "."
identifier "StorageHelpers"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "Implementations"
. "."
identifier "SystemBackupService"
; ";"
using_directive
using "using"
qualified_name
identifier "MediaBrowser"
. "."
identifier "Controller"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "MediaBrowser"
. "."
identifier "Controller"
. "."
identifier "SystemBackupService"
; ";"
using_directive
using "using"
qualified_name
identifier "Microsoft"
. "."
identifier "EntityFrameworkCore"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "EntityFrameworkCore"
. "."
identifier "Infrastructure"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "EntityFrameworkCore"
. "."
identifier "Migrations"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "Extensions"
. "."
identifier "Hosting"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "Extensions"
. "."
identifier "Logging"
; ";"
file_scoped_namespace_declaration
namespace "namespace"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "Implementations"
. "."
identifier "FullSystemBackup"
; ";"
comment "/// <summary>"
comment "/// Contains methods for creating and restoring backups."
comment "/// </summary>"
class_declaration
modifier
public "public"
class "class"
identifier "BackupService"
base_list
: ":"
identifier "IBackupService"
declaration_list
{ "{"
field_declaration
modifier
private "private"
modifier
const "const"
variable_declaration
predefined_type "string"
variable_declarator
identifier "ManifestEntryName"
= "="
string_literal
" "\""
string_literal_content "manifest.json"
" "\""
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
generic_name
identifier "ILogger"
type_argument_list
< "<"
identifier "BackupService"
> ">"
variable_declarator
identifier "_logger"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
generic_name
identifier "IDbContextFactory"
type_argument_list
< "<"
identifier "JellyfinDbContext"
> ">"
variable_declarator
identifier "_dbProvider"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IServerApplicationHost"
variable_declarator
identifier "_applicationHost"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IServerApplicationPaths"
variable_declarator
identifier "_applicationPaths"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IJellyfinDatabaseProvider"
variable_declarator
identifier "_jellyfinDatabaseProvider"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IHostApplicationLifetime"
variable_declarator
identifier "_hostApplicationLifetime"
; ";"
field_declaration (+41 nodes collapsed)
field_declaration (+24 nodes collapsed)
comment "/// <summary>"
comment "/// Initializes a new instance of the <see cref=\"BackupServi"...
comment "/// </summary>"
comment "/// <param name=\"logger\">A logger.</param>"
comment "/// <param name=\"dbProvider\">A Database Factory.</param>"
comment "/// <param name=\"applicationHost\">The Application host.</par"...
comment "/// <param name=\"applicationPaths\">The application paths.</p"...
comment "/// <param name=\"jellyfinDatabaseProvider\">The Jellyfin data"...
comment "/// <param name=\"applicationLifetime\">The SystemManager.</pa"...
constructor_declaration (+79 nodes collapsed)
comment "/// <inheritdoc/>"
method_declaration (+100 nodes collapsed)
comment "/// <inheritdoc/>"
method_declaration (+1671 nodes collapsed)
method_declaration (+35 nodes collapsed)
comment "/// <inheritdoc/>"
method_declaration
modifier
public "public"
modifier
async "async"
generic_name
identifier "Task"
type_argument_list
< "<"
identifier "BackupManifestDto"
> ">"
identifier "CreateBackupAsync"
parameter_list
( "("
parameter
identifier "BackupOptionsDto"
identifier "backupOptions"
) ")"
block
{ "{"
local_declaration_statement (+55 nodes collapsed)
expression_statement (+27 nodes collapsed)
local_declaration_statement (+21 nodes collapsed)
if_statement (+31 nodes collapsed)
local_declaration_statement (+21 nodes collapsed)
local_declaration_statement
modifier
const "const"
variable_declaration
predefined_type "long"
variable_declarator
identifier "FiveGigabyte"
= "="
integer_literal "5_368_709_115"
; ";"
if_statement (+51 nodes collapsed)
local_declaration_statement (+42 nodes collapsed)
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Attempt to create a new backup at {BackupPath}"
" "\""
, ","
argument
identifier "backupPath"
) ")"
; ";"
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "fileStream"
= "="
invocation_expression
member_access_expression
identifier "File"
. "."
identifier "OpenWrite"
argument_list
( "("
argument
identifier "backupPath"
) ")"
; ";"
using_statement
await "await"
using "using"
( "("
invocation_expression
member_access_expression
identifier "fileStream"
. "."
identifier "ConfigureAwait"
argument_list
( "("
argument
boolean_literal
false "false"
) ")"
) ")"
using_statement
using "using"
( "("
variable_declaration (+24 nodes collapsed)
) ")"
block
{ "{"
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Start backup process."
" "\""
) ")"
; ";"
local_declaration_statement (+28 nodes collapsed)
using_statement
await "await"
using "using"
( "("
invocation_expression
member_access_expression
identifier "dbContext"
. "."
identifier "ConfigureAwait"
argument_list
( "("
argument
boolean_literal
false "false"
) ")"
) ")"
block
{ "{"
expression_statement
assignment_expression
member_access_expression
member_access_expression
identifier "dbContext"
. "."
identifier "ChangeTracker"
. "."
identifier "QueryTrackingBehavior"
= "="
member_access_expression
identifier "QueryTrackingBehavior"
. "."
identifier "NoTracking"
; ";"
local_function_statement (+100 nodes collapsed)
comment "// include the migration history as well"
local_declaration_statement (+21 nodes collapsed)
local_declaration_statement (+28 nodes collapsed)
local_declaration_statement
variable_declaration
generic_name (+25 nodes collapsed)
variable_declarator
identifier "entityTypes"
= "="
collection_expression
[ "["
collection_element (+141 nodes collapsed)
, ","
collection_element
expression_element
tuple_expression
( "("
argument
identifier "Type"
: ":"
typeof_expression
typeof "typeof"
( "("
identifier "HistoryRow"
) ")"
, ","
argument (+33 nodes collapsed)
) ")"
] "]"
; ";"
expression_statement (+34 nodes collapsed)
local_declaration_statement (+31 nodes collapsed)
using_statement
await "await"
using "using"
( "("
invocation_expression
member_access_expression
identifier "transaction"
. "."
identifier "ConfigureAwait"
argument_list
( "("
argument
boolean_literal
false "false"
) ")"
) ")"
block
{ "{"
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Begin Database backup"
" "\""
) ")"
; ";"
foreach_statement
foreach "foreach"
( "("
implicit_type
var "var"
identifier "entityType"
in "in"
identifier "entityTypes"
) ")"
block
{ "{"
expression_statement (+24 nodes collapsed)
local_declaration_statement (+34 nodes collapsed)
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "entities"
= "="
integer_literal "0"
; ";"
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "zipEntryStream"
= "="
invocation_expression
member_access_expression
identifier "zipEntry"
. "."
identifier "Open"
argument_list
( "("
) ")"
; ";"
using_statement (+191 nodes collapsed)
expression_statement (+27 nodes collapsed)
} "}"
} "}"
} "}"
expression_statement (+21 nodes collapsed)
foreach_statement (+108 nodes collapsed)
local_function_statement (+145 nodes collapsed)
expression_statement (+48 nodes collapsed)
expression_statement (+48 nodes collapsed)
expression_statement (+27 nodes collapsed)
expression_statement (+48 nodes collapsed)
expression_statement (+48 nodes collapsed)
expression_statement (+48 nodes collapsed)
if_statement (+59 nodes collapsed)
if_statement (+59 nodes collapsed)
if_statement (+53 nodes collapsed)
local_declaration_statement (+25 nodes collapsed)
using_statement (+46 nodes collapsed)
} "}"
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Backup created"
" "\""
) ")"
; ";"
return_statement
return "return"
invocation_expression
identifier "Map"
argument_list
( "("
argument
identifier "manifest"
, ","
argument
identifier "backupPath"
) ")"
; ";"
} "}"
comment "/// <inheritdoc/>"
method_declaration (+147 nodes collapsed)
comment "/// <inheritdoc/>"
method_declaration (+218 nodes collapsed)
method_declaration (+187 nodes collapsed)
method_declaration (+74 nodes collapsed)
method_declaration (+59 nodes collapsed)
method_declaration (+59 nodes collapsed)
} "}"

After

compilation_unit
using_directive
using "using"
identifier "System"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "Collections"
. "."
identifier "Generic"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "IO"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "IO"
. "."
identifier "Compression"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Linq"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "Text"
. "."
identifier "Json"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "System"
. "."
identifier "Text"
. "."
identifier "Json"
. "."
identifier "Nodes"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "System"
. "."
identifier "Text"
. "."
identifier "Json"
. "."
identifier "Serialization"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Threading"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "Threading"
. "."
identifier "Tasks"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Database"
. "."
identifier "Implementations"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "Implementations"
. "."
identifier "StorageHelpers"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "Implementations"
. "."
identifier "SystemBackupService"
; ";"
using_directive
using "using"
qualified_name
identifier "MediaBrowser"
. "."
identifier "Controller"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "MediaBrowser"
. "."
identifier "Controller"
. "."
identifier "SystemBackupService"
; ";"
using_directive
using "using"
qualified_name
identifier "Microsoft"
. "."
identifier "EntityFrameworkCore"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "EntityFrameworkCore"
. "."
identifier "Infrastructure"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "EntityFrameworkCore"
. "."
identifier "Migrations"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "Extensions"
. "."
identifier "Hosting"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "Extensions"
. "."
identifier "Logging"
; ";"
file_scoped_namespace_declaration
namespace "namespace"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "Implementations"
. "."
identifier "FullSystemBackup"
; ";"
comment "/// <summary>"
comment "/// Contains methods for creating and restoring backups."
comment "/// </summary>"
class_declaration
modifier
public "public"
class "class"
identifier "BackupService"
base_list
: ":"
identifier "IBackupService"
declaration_list
{ "{"
field_declaration
modifier
private "private"
modifier
const "const"
variable_declaration
predefined_type "string"
variable_declarator
identifier "ManifestEntryName"
= "="
string_literal
" "\""
string_literal_content "manifest.json"
" "\""
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
generic_name
identifier "ILogger"
type_argument_list
< "<"
identifier "BackupService"
> ">"
variable_declarator
identifier "_logger"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
generic_name
identifier "IDbContextFactory"
type_argument_list
< "<"
identifier "JellyfinDbContext"
> ">"
variable_declarator
identifier "_dbProvider"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IServerApplicationHost"
variable_declarator
identifier "_applicationHost"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IServerApplicationPaths"
variable_declarator
identifier "_applicationPaths"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IJellyfinDatabaseProvider"
variable_declarator
identifier "_jellyfinDatabaseProvider"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IHostApplicationLifetime"
variable_declarator
identifier "_hostApplicationLifetime"
; ";"
field_declaration (+41 nodes collapsed)
field_declaration (+24 nodes collapsed)
comment "/// <summary>"
comment "/// Initializes a new instance of the <see cref=\"BackupServi"...
comment "/// </summary>"
comment "/// <param name=\"logger\">A logger.</param>"
comment "/// <param name=\"dbProvider\">A Database Factory.</param>"
comment "/// <param name=\"applicationHost\">The Application host.</par"...
comment "/// <param name=\"applicationPaths\">The application paths.</p"...
comment "/// <param name=\"jellyfinDatabaseProvider\">The Jellyfin data"...
comment "/// <param name=\"applicationLifetime\">The SystemManager.</pa"...
constructor_declaration (+79 nodes collapsed)
comment "/// <inheritdoc/>"
method_declaration (+100 nodes collapsed)
comment "/// <inheritdoc/>"
method_declaration (+1671 nodes collapsed)
method_declaration (+35 nodes collapsed)
comment "/// <inheritdoc/>"
method_declaration
modifier
public "public"
modifier
async "async"
generic_name
identifier "Task"
type_argument_list
< "<"
identifier "BackupManifestDto"
> ">"
identifier "CreateBackupAsync"
parameter_list
( "("
parameter
identifier "BackupOptionsDto"
identifier "backupOptions"
) ")"
block
{ "{"
local_declaration_statement (+55 nodes collapsed)
expression_statement (+27 nodes collapsed)
local_declaration_statement (+21 nodes collapsed)
if_statement (+31 nodes collapsed)
local_declaration_statement (+21 nodes collapsed)
local_declaration_statement
modifier
const "const"
variable_declaration
predefined_type "long"
variable_declarator
identifier "FiveGigabyte"
= "="
integer_literal "5_368_709_115"
; ";"
if_statement (+51 nodes collapsed)
local_declaration_statement (+42 nodes collapsed)
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Attempt to create a new backup at {BackupPath}"
" "\""
, ","
argument
identifier "backupPath"
) ")"
; ";"
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "fileStream"
= "="
invocation_expression
member_access_expression
identifier "File"
. "."
identifier "OpenWrite"
argument_list
( "("
argument
identifier "backupPath"
) ")"
; ";"
using_statement
await "await"
using "using"
( "("
invocation_expression
member_access_expression
identifier "fileStream"
. "."
identifier "ConfigureAwait"
argument_list
( "("
argument
boolean_literal
false "false"
) ")"
) ")"
using_statement
using "using"
( "("
variable_declaration (+24 nodes collapsed)
) ")"
block
{ "{"
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Start backup process."
" "\""
) ")"
; ";"
local_declaration_statement (+28 nodes collapsed)
using_statement
await "await"
using "using"
( "("
invocation_expression
member_access_expression
identifier "dbContext"
. "."
identifier "ConfigureAwait"
argument_list
( "("
argument
boolean_literal
false "false"
) ")"
) ")"
block
{ "{"
expression_statement
assignment_expression
member_access_expression
member_access_expression
identifier "dbContext"
. "."
identifier "ChangeTracker"
. "."
identifier "QueryTrackingBehavior"
= "="
member_access_expression
identifier "QueryTrackingBehavior"
. "."
identifier "NoTracking"
; ";"
local_function_statement (+100 nodes collapsed)
comment "// include the migration history as well"
local_declaration_statement (+21 nodes collapsed)
local_declaration_statement (+28 nodes collapsed)
local_declaration_statement
variable_declaration
generic_name (+25 nodes collapsed)
variable_declarator
identifier "entityTypes"
= "="
collection_expression
[ "["
collection_element (+141 nodes collapsed)
, ","
collection_element
expression_element
tuple_expression
( "("
argument
identifier "Type"
: ":"
typeof_expression
typeof "typeof"
( "("
generic_name
identifier "IQueryable"
type_argument_list
< "<"
identifier "HistoryRow"
> ">"
) ")"
, ","
argument (+33 nodes collapsed)
) ")"
] "]"
; ";"
expression_statement (+34 nodes collapsed)
local_declaration_statement (+31 nodes collapsed)
using_statement
await "await"
using "using"
( "("
invocation_expression
member_access_expression
identifier "transaction"
. "."
identifier "ConfigureAwait"
argument_list
( "("
argument
boolean_literal
false "false"
) ")"
) ")"
block
{ "{"
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Begin Database backup"
" "\""
) ")"
; ";"
foreach_statement
foreach "foreach"
( "("
implicit_type
var "var"
identifier "entityType"
in "in"
identifier "entityTypes"
) ")"
block
{ "{"
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "schemaName"
= "="
postfix_unary_expression
invocation_expression
member_access_expression
postfix_unary_expression
invocation_expression
member_access_expression
member_access_expression
identifier "dbContext"
. "."
identifier "Model"
. "."
identifier "FindEntityType"
argument_list
( "("
argument
element_access_expression
invocation_expression
member_access_expression
member_access_expression
identifier "entityType"
. "."
identifier "Type"
. "."
identifier "GetGenericArguments"
argument_list
( "("
) ")"
bracketed_argument_list
[ "["
argument
integer_literal "0"
] "]"
) ")"
! "!"
. "."
identifier "GetSchemaQualifiedTableName"
argument_list
( "("
) ")"
! "!"
; ";"
expression_statement (+24 nodes collapsed)
local_declaration_statement (+34 nodes collapsed)
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "entities"
= "="
integer_literal "0"
; ";"
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "zipEntryStream"
= "="
invocation_expression
member_access_expression
identifier "zipEntry"
. "."
identifier "Open"
argument_list
( "("
) ")"
; ";"
using_statement (+191 nodes collapsed)
expression_statement (+27 nodes collapsed)
} "}"
} "}"
} "}"
expression_statement (+21 nodes collapsed)
foreach_statement (+108 nodes collapsed)
local_function_statement (+145 nodes collapsed)
expression_statement (+48 nodes collapsed)
expression_statement (+48 nodes collapsed)
expression_statement (+27 nodes collapsed)
expression_statement (+48 nodes collapsed)
expression_statement (+48 nodes collapsed)
expression_statement (+48 nodes collapsed)
if_statement (+59 nodes collapsed)
if_statement (+59 nodes collapsed)
if_statement (+53 nodes collapsed)
local_declaration_statement (+25 nodes collapsed)
using_statement (+46 nodes collapsed)
} "}"
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Backup created"
" "\""
) ")"
; ";"
return_statement
return "return"
invocation_expression
identifier "Map"
argument_list
( "("
argument
identifier "manifest"
, ","
argument
identifier "backupPath"
) ")"
; ";"
} "}"
comment "/// <inheritdoc/>"
method_declaration (+147 nodes collapsed)
comment "/// <inheritdoc/>"
method_declaration (+218 nodes collapsed)
method_declaration (+187 nodes collapsed)
method_declaration (+74 nodes collapsed)
method_declaration (+59 nodes collapsed)
method_declaration (+59 nodes collapsed)
} "}"