Jak přes PDO z Linuxu na MSSQL databázi

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
blacksun
Člen | 177
+
0
-

Po různých peripetiích se mi povedlo rozjet PDO rozšíření na linuxu (Centos) a připojit se na MSSQL databázi přes ODBC.

Bohužel při použití NetteDatabase (chci použít NiftyGrid) se volá PDOStatement->getColumnMeta() a dostávám SQLSTATE[IM001]: Driver does not support this function: driver doesn't support meta dat.

Povedlo se někomu rozjet NetteDatabase nebo NotORM pod linuxem s přístupem do MSSQL databáze a byl by ochotný se podělit/pomoci? Už nad tím trávím víc jak den.

Další variantou, jak to vyřešit, by bylo implementovat data source rozhraní NiftyGridu pomocí dibiDataSource – dibi jede v pohodě.

Jen se mi nechce zdát, že by nebylo možné jednoduše použít NetteDatabase z linuxu.

Díky za reakce.

Editoval blacksun (13. 7. 2012 16:06)

jtousek
Člen | 951
+
0
-

To nemá co dělat s linuxem. Použitý driver pdo_odbc nepodporuje meta data na čemž to zhavaruje.

blacksun
Člen | 177
+
0
-

Ok, ale jak z toho tedy ven, když PDO nejede přes mssql knihovnu jako například dibi :-/

jtousek
Člen | 951
+
0
-

Beru zpět, Nette\Database by tu metodu getColumnMeta neměla potřebovat. Jediné místo, kde jsem ji našel je tady. Pokud to havaruje tady tak ti stačí upravit tu podmínku na řádku 135, tj. zajistit, aby vracela FALSE. Pokud to havaruje někde jinde než tady, tak to bude asi kód NiftyGridu, tam nehledal.

EDIT: Příště pls rovnou s laděnkou, ta by pomohla.

Editoval jtousek (14. 7. 2012 9:25)

RadH
Člen | 23
+
0
-

Problém je v jednotlivých driverech, které implementují ISupplementalDriver. Do metody isSupported vstupuje parametr ISupplementalDriver::META a v dané metodě se porovnává proti self::META viz: kód. A jelikož není tato konstanta v žádném driveru nikde změněna, tak se vrací vždy TRUE, i když daný driver tuto metodu nepodporuje.
U driverů, které meta nepodporují by měla být konstanta META přepsána, aby se vracelo FALSE.

jtousek
Člen | 951
+
0
-

Kromě toho v tom interface ISupplementalDriver metoda isSupported chybí. Takže tu máme rovnou dvě chyby.

blacksun
Člen | 177
+
0
-

Díky, pomohli jste mi ;-)

Zkouším tedy upravit OdbcDriver – doplnit tam konstantu META (const META = false;), ale dostávám

Compile Error – Cannot inherit previously-inherited or override constant META from interface Nette\Database\ISupplementalDriver.

Asi se na to bude muset jinak, ale nenapadá mě aktuálně jak, nakopnete mě někdo?

P.S. nedaří se mi vložit php kód mezi značky <?php a ?>, vypisuje mi je to taky.. :-/

Editoval blacksun (16. 7. 2012 13:18)

RadH
Člen | 23
+
0
-

Interface nedovolí přepsat konstantu
Vytvoř jinou konstatnu a tu použij pro porovnání nebo v metodě isSupported rovnou vracej FALSE.

jtousek
Člen | 951
+
0
-

Ta konstanta META imho nemá vůbec sloužit pro porovnání, ale jen pro identifikaci, jaká featura se po driveru chce. Tzn. teoreticky by tam mohlo být i něco jiného než META a v metodě isSupported by pak byl nějaký switch.

blacksun
Člen | 177
+
0
-

Zatím jsem to udělal přes přímý return false;, i když to asi není nejčistší.. Teď válčím s úpravou metod getTables() a getColumns(), které NiftyGrid potřebuje..