DB2 - Problembeschreibung
| Problem IC77827 | Status: Geschlossen |
LINQ EF QUERIES THAT USE CONTAINS, STARTSWITH OR ENDSWITH FUNCTIONS GENERATE INVALID SQL FOR IDS ON .NET 4.0 | |
| Produkt: | |
DB2 CONNECT / DB2CONNCT / 970 - DB2 | |
| Problembeschreibung: | |
When Contains, StartsWith or EndsWith is used in the Where
clause of LINQ query, the .NET 4.0 runtime converts it to LIKE
expression. Moreover, when a string variable, instead of a
contant, is used as input to one of those functions, the
generated LIKE expression contains an ESCAPE clause with the
default escape character of '\'. Since '\' is a constant
expression, the EF providers' SQL Generator converts it to a
CAST expression of CAST('\' as nvarchar(1)). However, the IDS
servers' ESCAPE clause doesn't support cast expressions, thus, a
syntax error is generated for this SQL.
From the customer perspective this means that while the
folllwing LINQ query works fine:
var plans = model.Plans.Where(p =>
p.plan.StartsWith("AND")).Select(p =>
new{p.plan,p.id}).ToList();
The same query that uses a variable instead of constant fails:
var startsWith = "AND";
var plans = model.Plans.Where(p =>
p.plan.StartsWith(startsWith)).Select(p =>
new{p.plan,p.id}).ToList();
with the following error message: "ERROR 42000 IBMIDS/UNIX64 A
syntax error has occurred." | |
| Problem-Zusammenfassung: | |
****************************************************************
* USERS AFFECTED: *
* .NET 4.0 applications using EF 4.0 against IDS server *
****************************************************************
* PROBLEM DESCRIPTION: *
* When Contains, StartsWith or EndsWith is used in the Where *
* *
* clause of LINQ query, the .NET 4.0 runtime converts it to *
* LIKE *
* expression. Moreover, when a string variable, instead of a *
* *
* contant, is used as input to one of those functions, the *
* *
* generated LIKE expression contains an ESCAPE clause with the *
* *
* default escape character of '\'. Since '\' is a constant *
* *
* expression, the EF providers' SQL Generator converts it to a *
* *
* CAST expression of CAST('\' as nvarchar(1)). However, the *
* IDS *
* servers' ESCAPE clause doesn't support cast expressions, *
* thus, a *
* syntax error is generated for this SQL. *
* *
* From the customer perspective this means that while the *
* *
* folllwing LINQ query works fine: *
* *
* *
* *
* var plans = model.Plans.Where(p => *
* *
* p.plan.StartsWith("AND")).Select(p => *
* *
* new{p.plan,p.id}).ToList(); *
* *
* *
* *
* The same query that uses a variable instead of constant *
* fails: *
* *
* *
* var startsWith = "AND"; *
* *
* var plans = model.Plans.Where(p => *
* *
* p.plan.StartsWith(startsWith)).Select(p => *
* *
* new{p.plan,p.id}).ToList(); *
* *
* *
* *
* with the following error message: "ERROR 42000 *
* IBMIDS/UNIX64 A *
* syntax error has occurred." *
****************************************************************
* RECOMMENDATION: *
* Upgrade the client to V9.7 FP5. *
**************************************************************** | |
| Local-Fix: | |
| verfügbare FixPacks: | |
DB2 Version 9.7 Fix Pack 5 for Linux, UNIX, and Windows | |
| Lösung | |
| Workaround | |
keiner bekannt / siehe Local-Fix | |
| Weitere Daten | |
Datum - Problem gemeldet : Datum - Problem geschlossen : Datum - der letzten Änderung: | 28.07.2011 07.12.2011 07.12.2011 |
| Problem behoben ab folgender Versionen (IBM BugInfos) | |
9.7.FP5 | |
| Problem behoben lt. FixList in der Version | |
| 9.7.0.5 |
|