Skip to content

Bump JasperFx 1.28.2 to fix List<T> duplicate-field codegen (closes #3702)#4314

Merged
jeremydmiller merged 1 commit intomasterfrom
close-3702-via-jasperfx-fix
Apr 29, 2026
Merged

Bump JasperFx 1.28.2 to fix List<T> duplicate-field codegen (closes #3702)#4314
jeremydmiller merged 1 commit intomasterfrom
close-3702-via-jasperfx-fix

Conversation

@jeremydmiller
Copy link
Copy Markdown
Member

Summary

Why this supersedes #3702

A document with

[DuplicateField(DbType = NpgsqlDbType.Array | NpgsqlDbType.Text,
                PgType = "text[]", IndexMethod = IndexMethod.gin)]
public List<string> ListOfStrings { get; set; }

caused Marten codegen to emit:

parameter0.NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.-2147483629;

— an Enum.ToString() of an undefined enum value yielding an integer literal. Roslyn rejected it (CS1001 Identifier expected).

#3702 patched two call sites in UpsertArgument.cs. The root cause was actually in JasperFx's CodeFormatter.Write, which used value.GetType().FullNameInCode() + "." + value (implicit ToString()) for every enum. Fixing it there handles every other call-site too — past and future.

The 1.28.2 fix:

  • Defined single member ⇒ Type.Name (unchanged)
  • [Flags] combo ⇒ Type.A | Type.B
  • Any other value (incl. non-Flags bit-OR'd values) ⇒ ((Type)(rawIntegerLiteral))

Closes #3702. Anne — er, Ben Edwards (@elexisvenator) — kept as co-author on the reproduction test.

Test plan

  • dotnet test src/DocumentDbTests --filter Bug_PR_3702 -f net9.0 passes locally
  • Full CI green

🤖 Generated with Claude Code

…#3702)

JasperFx 1.28.2 includes a fix to CodeFormatter.Write that emits
safe C# for any enum value — including bit-OR'd combinations on
non-[Flags] enums like Npgsql.NpgsqlDbType. Previously a member
declared as

    [DuplicateField(DbType = NpgsqlDbType.Array | NpgsqlDbType.Text,
                    PgType = "text[]", IndexMethod = IndexMethod.gin)]
    public List<string> ListOfStrings { get; set; }

would generate uncompilable source like

    parameter0.NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.-2147483629;

because Enum.ToString returns the integer literal as a string for
undefined enum values. The JasperFx fix emits a checked cast for
those values: `((NpgsqlDbType)(-2147483629))`.

The reproduction test from elexisvenator's #3702 is preserved here
verbatim; the JasperFx-side fix lets it pass with no Marten code
change. Closes #3702.

Co-Authored-By: Ben Edwards <elexisvenator@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant