Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@ public void Configure(EntityTypeBuilder<QuartzFiredTrigger> builder)
.HasColumnName("REQUESTS_RECOVERY")
.HasColumnType("tinyint(1)");

builder.Property(x => x.ExecutionGroup)
.HasColumnName("EXECUTION_GROUP")
.HasColumnType("varchar(200)");

builder.HasIndex(x => x.TriggerName)
.HasDatabaseName($"IDX_{prefix}FT_TRIG_NAME");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,20 @@ public void Configure(EntityTypeBuilder<QuartzTrigger> builder)
.HasColumnName("MISFIRE_ORIG_FIRE_TIME")
.HasColumnType("bigint(19)");

builder.Property(x => x.ExecutionGroup)
.HasColumnName("EXECUTION_GROUP")
.HasColumnType("varchar(200)");

builder.Property(x => x.PreferredNode)
.HasColumnName("PREFERRED_NODE")
.HasColumnType("varchar(200)");

builder.Property(x => x.PreferredNodeAuto)
.HasColumnName("PREFERRED_NODE_AUTO")
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.IsRequired();

builder.Property(x => x.CalendarName)
.HasColumnName("CALENDAR_NAME")
.HasColumnType("varchar(200)");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,10 @@ public void Configure(EntityTypeBuilder<QuartzFiredTrigger> builder)
.HasColumnName("requests_recovery")
.HasColumnType("bool");

builder.Property(x => x.ExecutionGroup)
.HasColumnName("execution_group")
.HasColumnType("text");

builder.HasIndex(x => x.TriggerName)
.HasDatabaseName($"idx_{prefix}ft_trig_name");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,20 @@ public void Configure(EntityTypeBuilder<QuartzTrigger> builder)
.HasColumnName("misfire_orig_fire_time")
.HasColumnType("bigint");

builder.Property(x => x.ExecutionGroup)
.HasColumnName("execution_group")
.HasColumnType("text");

builder.Property(x => x.PreferredNode)
.HasColumnName("preferred_node")
.HasColumnType("text");

builder.Property(x => x.PreferredNodeAuto)
.HasColumnName("preferred_node_auto")
.HasColumnType("bool")
.HasDefaultValue(false)
.IsRequired();

builder.Property(x => x.CalendarName)
.HasColumnName("calendar_name")
.HasColumnType("text");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@ public void Configure(EntityTypeBuilder<QuartzFiredTrigger> builder)
.HasColumnName("REQUESTS_RECOVERY")
.HasColumnType("bool");

builder.Property(x => x.ExecutionGroup)
.HasColumnName("EXECUTION_GROUP")
.HasColumnType("text");

builder.HasIndex(x => x.TriggerName)
.HasDatabaseName($"IDX_{_prefix}FT_TRIG_NAME");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,20 @@ public void Configure(EntityTypeBuilder<QuartzTrigger> builder)
.HasColumnName("MISFIRE_ORIG_FIRE_TIME")
.HasColumnType("bigint");

builder.Property(x => x.ExecutionGroup)
.HasColumnName("EXECUTION_GROUP")
.HasColumnType("text");

builder.Property(x => x.PreferredNode)
.HasColumnName("PREFERRED_NODE")
.HasColumnType("text");

builder.Property(x => x.PreferredNodeAuto)
.HasColumnName("PREFERRED_NODE_AUTO")
.HasColumnType("bool")
.HasDefaultValue(false)
.IsRequired();

builder.Property(x => x.CalendarName)
.HasColumnName("CALENDAR_NAME")
.HasColumnType("text");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,11 @@ public void Configure(EntityTypeBuilder<QuartzFiredTrigger> builder)
builder.Property(x => x.RequestsRecovery)
.HasColumnName("REQUESTS_RECOVERY");

builder.Property(x => x.ExecutionGroup)
.HasColumnName("EXECUTION_GROUP")
.HasMaxLength(200)
.IsUnicode();

builder.HasIndex(x => x.TriggerName)
.HasDatabaseName($"IDX_{prefix}FT_TRIG_NAME");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,21 @@ public void Configure(EntityTypeBuilder<QuartzTrigger> builder)
.HasColumnName("MISFIRE_ORIG_FIRE_TIME")
.HasColumnType("bigint");

builder.Property(x => x.ExecutionGroup)
.HasColumnName("EXECUTION_GROUP")
.HasMaxLength(200)
.IsUnicode();

builder.Property(x => x.PreferredNode)
.HasColumnName("PREFERRED_NODE")
.HasMaxLength(200)
.IsUnicode();

builder.Property(x => x.PreferredNodeAuto)
.HasColumnName("PREFERRED_NODE_AUTO")
.HasDefaultValue(false)
.IsRequired();

builder.Property(x => x.CalendarName)
.HasColumnName("CALENDAR_NAME")
.HasMaxLength(200)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ public class QuartzFiredTrigger
public string? JobGroup { get; set; }
public bool IsNonConcurrent { get; set; }
public bool? RequestsRecovery { get; set; }
public string? ExecutionGroup { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ public class QuartzTrigger
public long StartTime { get; set; }
public long? EndTime { get; set; }
public long? MisfireOriginalFireTime { get; set; }
public string? ExecutionGroup { get; set; }
public string? PreferredNode { get; set; }
public bool PreferredNodeAuto { get; set; }
public string? CalendarName { get; set; } = null!;
public short? MisfireInstruction { get; set; }
public byte[]? JobData { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,79 @@ public void ShouldMapMisfireOriginalFireTimeColumn()
Assert.Equal("MISFIRE_ORIG_FIRE_TIME", property!.GetColumnName(table));
Assert.Equal("bigint(19)", property.GetColumnType());
}

[Fact]
public void ShouldMapExecutionGroupColumnOnTriggers()
{
using var dbContext = new MySqlIntegrationDbContext(CreateOptions());
var entityType = dbContext.Model.FindEntityType(typeof(QuartzTrigger));

Assert.NotNull(entityType);

var property = entityType!.FindProperty(nameof(QuartzTrigger.ExecutionGroup));
Assert.NotNull(property);

var table = StoreObjectIdentifier.Table(entityType.GetTableName()!, entityType.GetSchema());
Assert.Equal("EXECUTION_GROUP", property!.GetColumnName(table));
Assert.Equal("varchar(200)", property.GetColumnType());
Assert.True(property.IsNullable);
}

[Fact]
public void ShouldMapExecutionGroupColumnOnFiredTriggers()
{
using var dbContext = new MySqlIntegrationDbContext(CreateOptions());
var entityType = dbContext.Model.FindEntityType(typeof(QuartzFiredTrigger));

Assert.NotNull(entityType);

var property = entityType!.FindProperty(nameof(QuartzFiredTrigger.ExecutionGroup));
Assert.NotNull(property);

var table = StoreObjectIdentifier.Table(entityType.GetTableName()!, entityType.GetSchema());
Assert.Equal("EXECUTION_GROUP", property!.GetColumnName(table));
Assert.Equal("varchar(200)", property.GetColumnType());
Assert.True(property.IsNullable);
}

[Fact]
public void ShouldMapPreferredNodeColumnsOnTriggers()
{
using var dbContext = new MySqlIntegrationDbContext(CreateOptions());
var entityType = dbContext.Model.FindEntityType(typeof(QuartzTrigger));

Assert.NotNull(entityType);

var table = StoreObjectIdentifier.Table(entityType!.GetTableName()!, entityType.GetSchema());

var preferredNode = entityType.FindProperty(nameof(QuartzTrigger.PreferredNode));
Assert.NotNull(preferredNode);
Assert.Equal("PREFERRED_NODE", preferredNode!.GetColumnName(table));
Assert.Equal("varchar(200)", preferredNode.GetColumnType());
Assert.True(preferredNode.IsNullable);

var preferredNodeAuto = entityType.FindProperty(nameof(QuartzTrigger.PreferredNodeAuto));
Assert.NotNull(preferredNodeAuto);
Assert.Equal("PREFERRED_NODE_AUTO", preferredNodeAuto!.GetColumnName(table));
Assert.Equal("tinyint(1)", preferredNodeAuto.GetColumnType());
Assert.False(preferredNodeAuto.IsNullable);
Assert.Equal(false, preferredNodeAuto.GetDefaultValue());
}

private static DbContextOptions<MySqlIntegrationDbContext> CreateOptions()
{
#if NET10_0_OR_GREATER
// Oracle MySQL provider uses UseMySQL (capital SQL) and doesn't require ServerVersion parameter
return new DbContextOptionsBuilder<MySqlIntegrationDbContext>()
.UseMySQL("Server=localhost;Port=3306;Database=quartz_mapping_tests;User=root;Password=password")
.Options;
#else
// Pomelo provider uses UseMySql and requires ServerVersion parameter (NET8_0)
return new DbContextOptionsBuilder<MySqlIntegrationDbContext>()
.UseMySql(
"Server=localhost;Port=3306;Database=quartz_mapping_tests;User=root;Password=password",
ServerVersion.Parse("8.0.36-mysql"))
.Options;
#endif
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,69 @@ public void ShouldMapMisfireOriginalFireTimeColumn()
Assert.Equal("misfire_orig_fire_time", property!.GetColumnName(table));
Assert.Equal("bigint", property.GetColumnType());
}

[Fact]
public void ShouldMapExecutionGroupColumnOnTriggers()
{
using var dbContext = new PostgreSqlIntegrationDbContext(CreateOptions());
var entityType = dbContext.Model.FindEntityType(typeof(QuartzTrigger));

Assert.NotNull(entityType);

var property = entityType!.FindProperty(nameof(QuartzTrigger.ExecutionGroup));
Assert.NotNull(property);

var table = StoreObjectIdentifier.Table(entityType.GetTableName()!, entityType.GetSchema());
Assert.Equal("execution_group", property!.GetColumnName(table));
Assert.Equal("text", property.GetColumnType());
Assert.True(property.IsNullable);
}

[Fact]
public void ShouldMapExecutionGroupColumnOnFiredTriggers()
{
using var dbContext = new PostgreSqlIntegrationDbContext(CreateOptions());
var entityType = dbContext.Model.FindEntityType(typeof(QuartzFiredTrigger));

Assert.NotNull(entityType);

var property = entityType!.FindProperty(nameof(QuartzFiredTrigger.ExecutionGroup));
Assert.NotNull(property);

var table = StoreObjectIdentifier.Table(entityType.GetTableName()!, entityType.GetSchema());
Assert.Equal("execution_group", property!.GetColumnName(table));
Assert.Equal("text", property.GetColumnType());
Assert.True(property.IsNullable);
}

[Fact]
public void ShouldMapPreferredNodeColumnsOnTriggers()
{
using var dbContext = new PostgreSqlIntegrationDbContext(CreateOptions());
var entityType = dbContext.Model.FindEntityType(typeof(QuartzTrigger));

Assert.NotNull(entityType);

var table = StoreObjectIdentifier.Table(entityType!.GetTableName()!, entityType.GetSchema());

var preferredNode = entityType.FindProperty(nameof(QuartzTrigger.PreferredNode));
Assert.NotNull(preferredNode);
Assert.Equal("preferred_node", preferredNode!.GetColumnName(table));
Assert.Equal("text", preferredNode.GetColumnType());
Assert.True(preferredNode.IsNullable);

var preferredNodeAuto = entityType.FindProperty(nameof(QuartzTrigger.PreferredNodeAuto));
Assert.NotNull(preferredNodeAuto);
Assert.Equal("preferred_node_auto", preferredNodeAuto!.GetColumnName(table));
Assert.Equal("bool", preferredNodeAuto.GetColumnType());
Assert.False(preferredNodeAuto.IsNullable);
Assert.Equal(false, preferredNodeAuto.GetDefaultValue());
}

private static DbContextOptions<PostgreSqlIntegrationDbContext> CreateOptions()
{
return new DbContextOptionsBuilder<PostgreSqlIntegrationDbContext>()
.UseNpgsql("Host=localhost;Port=5432;Database=quartz_mapping_tests;Username=postgres;Password=postgres")
.Options;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,75 @@ public void ShouldMapMisfireOriginalFireTimeColumn()
Assert.Equal("MISFIRE_ORIG_FIRE_TIME", property!.GetColumnName(table));
Assert.Equal("bigint", property.GetColumnType());
}

[Fact]
public void ShouldMapExecutionGroupColumnOnTriggers()
{
using var dbContext = new SQLiteIntegrationDbContext(CreateOptions());
var entityType = dbContext.Model.FindEntityType(typeof(QuartzTrigger));

Assert.NotNull(entityType);

var property = entityType!.FindProperty(nameof(QuartzTrigger.ExecutionGroup));
Assert.NotNull(property);

var table = StoreObjectIdentifier.Table(entityType.GetTableName()!, entityType.GetSchema());
Assert.Equal("EXECUTION_GROUP", property!.GetColumnName(table));
Assert.Equal("text", property.GetColumnType());
Assert.True(property.IsNullable);
}

[Fact]
public void ShouldMapExecutionGroupColumnOnFiredTriggers()
{
using var dbContext = new SQLiteIntegrationDbContext(CreateOptions());
var entityType = dbContext.Model.FindEntityType(typeof(QuartzFiredTrigger));

Assert.NotNull(entityType);

var property = entityType!.FindProperty(nameof(QuartzFiredTrigger.ExecutionGroup));
Assert.NotNull(property);

var table = StoreObjectIdentifier.Table(entityType.GetTableName()!, entityType.GetSchema());
Assert.Equal("EXECUTION_GROUP", property!.GetColumnName(table));
Assert.Equal("text", property.GetColumnType());
Assert.True(property.IsNullable);
}

[Fact]
public void ShouldMapPreferredNodeColumnsOnTriggers()
{
using var dbContext = new SQLiteIntegrationDbContext(CreateOptions());
var entityType = dbContext.Model.FindEntityType(typeof(QuartzTrigger));

Assert.NotNull(entityType);

var table = StoreObjectIdentifier.Table(entityType!.GetTableName()!, entityType.GetSchema());

var preferredNode = entityType.FindProperty(nameof(QuartzTrigger.PreferredNode));
Assert.NotNull(preferredNode);
Assert.Equal("PREFERRED_NODE", preferredNode!.GetColumnName(table));
Assert.Equal("text", preferredNode.GetColumnType());
Assert.True(preferredNode.IsNullable);

var preferredNodeAuto = entityType.FindProperty(nameof(QuartzTrigger.PreferredNodeAuto));
Assert.NotNull(preferredNodeAuto);
Assert.Equal("PREFERRED_NODE_AUTO", preferredNodeAuto!.GetColumnName(table));
Assert.Equal("bool", preferredNodeAuto.GetColumnType());
Assert.False(preferredNodeAuto.IsNullable);
Assert.Equal(false, preferredNodeAuto.GetDefaultValue());
}

private static DbContextOptions<SQLiteIntegrationDbContext> CreateOptions()
{
var connectionString = new SqliteConnectionStringBuilder
{
Mode = SqliteOpenMode.Memory,
DataSource = ":memory:"
}.ToString();

return new DbContextOptionsBuilder<SQLiteIntegrationDbContext>()
.UseSqlite(connectionString)
.Options;
}
}
Loading