Figure out type semantics to use for concatenation and similar cases

Open
#14,719 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
20/100
Issue type
Feature
Clarity
Needs clarification
Activity status
Stale
Tech stack
csharp
Domain
databases

Research direction

Start by tracing EF Core's expression-tree type inference and SQL translation for c.CustomerID + i, using the issue's generated SQL as the concrete case. Determine and document the semantics for string length and fixed-length facets, parameter casting, and the resulting expression type; done means the rules are agreed and the translation behavior is covered accordingly.

Written by the indexing model from the issue text.

Description

area-query area-set-operations needs-design

Suppose we have
var i = 5; //int parameter from closure
c.CustomerID which is mapped in database as nchar(5)
and when you have c.CustomerID + i in expression tree, we try to infer type.

  • Should type of parameter i be nchar(5)?
    • what if the value does not fit in length 5?
  • What should be type of resulting expression?
    • It cannot be nchar(5) because result of concatenation would be larger than that.
  • The translation generates this [c].[CustomerID] + CAST(@__i_0 AS nchar(5)) so we need to figure out exact type to use for casting purposes.

Few ideas around

  • Ignore length facets for string?
  • Ignore Fixed length too?
Dominant language
C#
Stars
14.8k
Forks
3.4k
Avg merge
2d 5h
Merged PRs (30d)
134

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from dotnet/efcore

All issues in dotnet/efcore

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.