2012-03-24 6 views
0

Ich habe diese SQL-Abfrage (in T-SQL):Npgsql: Kann es ODBC Espace Sequenzen erkennen?

--DECLARE @strTerm varchar(300) 
--SET @strTerm = 'c' 


SELECT TOP 10 
    USR_ID 
    ,USR_UserName 
FROM T_Benutzer 

WHERE (1=1) 
--AND {fn LCASE(USR_UserName)} LIKE {fn LCASE(@strTerm + '%')} 
AND {fn LCASE(BE_User)} LIKE {fn LCASE({fn CONCAT(@strTerm, '%')})} 
--AND BE_Hide = 0 
AND BE_Hide = 'false' 

ORDER BY USR_UserName 

Dann habe ich eine Automagic regex Transformation, die I einschalten kann, um die oben Syntax mit PostgreSQL kompatibel zu machen, die die folgende Ausgabeanweisung erzeugt von der Eingangsrechnung:

SELECT 
    USR_ID 
    ,USR_UserName 
FROM T_Benutzer 
WHERE (1=1) 
AND {fn LCASE(BE_User)} LIKE {fn LCASE({fn CONCAT(@strTerm, '%')})} 
AND BE_Hide = 'false' 
ORDER BY USR_UserName 
LIMIT 10 

ich dachte, das sollte die meisten Dinge zum Laufen zu bringen auf PostgreSQL ausreicht, aber jetzt merke ich, dass Npgsql nicht ODBC-Escape-Sequenzen ({fn was auch immer()}) erkennen.

Gibt es eine Option in den Npgsql Connectionstring-Einstellungen, die ich einschalten kann, oder in Postgres selbst?
Oder bin ich Pech und muss eine ODBC-Escape-Funktionen ersetzen Funktion schreiben?

+0

Beachten Sie, dass ich nicht den ODBC-Treiber selbst verwenden möchte, da die Mono-Implementierung des Wrappers um ODBC von fragwürdiger Qualität ist. –

Antwort

1

Der PostgreSQL-Server selbst hat keine Escape-Syntax für solche Funktionen. Der Zweck dieser Escape-Syntax besteht darin, mehrere DB-Dialekte zu abstrahieren. Genau dies auf einen bestimmten Server zu verschieben wäre bestenfalls zweifelhaft.

Das Handbuch Npgsql erwähnt zu diesem Zweck keine Escape-Verarbeitung oder Verbindungszeichenfolgenparameter.

Sie sind also kein Glück.

+0

Falsch. Es ist wahr, dass Npgsql es nicht unterstützt, also hatte ich kein Glück. Aber jetzt (nach dem Wochenende) habe ich einen ODBC-Escape-Sequenz Syntax Parser und Ersetzer geschrieben. Funktioniert hervorragend, einschließlich der Auflösung von verschachtelten Anweisungen durch Rekursion. –