conexões codeigniter e odbc

Não entendo por que o CodeIgniter está envolvendo o nome da minha tabela entre colchetes. Quando eu uso o driver ODBC do CodeIgniter para MS SQL, ele mostra os erros abaixo, no entanto, ele funciona perfeitamente usando o driver MySql. Como posso parar esse erro?

A Database Error Occurred Error Number: 37000 [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ')'. SELECT * FROM (ci_sessions) WHERE session_id = '3ad914bb5f5728e8ac69ad1db8fc9841' AND user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2' Filename: D:\wamp\www\IVR_Panel\system\database\DB_driver.php Line Number: 330 

Eu também tentei executar a mesma consulta no SQL Server 2005, que funciona sem os colchetes, mas ainda erros com eles. Estou usando registro ativo para poder mudar facilmente entre drivers ODBC e MySQL. Onde posso modificar CodeIgniter para remover os suportes?

Este é realmente um bug no CodeIgniter. No driver ODBC (/system/database/drivers/odbc/odbc_driver.php) quando você seleciona uma tabela, ela usa o seguinte método:

 function _from_tables($tables) { if ( ! is_array($tables)) { $tables = array($tables); } return '('.implode(', ', $tables).')'; } 

Ele tenta agrupar várias seleções de tabelas em conjunto para impor a precedência do operador, isso deve funcionar bem se você estiver usando mais de uma tabela, no entanto, com uma tabela, ela ainda tenta agrupá-la, o que causa o erro que você está recebendo.

Infelizmente, não acredito que seja possível estender esses arquivos de driver, então você pode precisar editar o arquivo principal. Tome nota disso, caso você precise atualizar CodeIgniter no futuro, você terá que mudar o método para algo como o seguinte:

 function _from_tables($tables) { if ( ! is_array($tables)) { return strstr($tables, ',') ? '('.$tables.')' : $tables; } else { return count($tables) > 1 ? '('.implode(', ', $tables).')' : end($tables); } }