views:

145

answers:

3

My company uses Vertica. We have Python applications that connect to it with pyodbc. I do most of my development on a Mac (Snow Leopard) and unfortunately Vertica has not released ODBC drivers for Mac. They do have JDBC drivers though. I don't think developing in Jython is a good compromise. Is there any way to use JDBC drivers with an ODBC application? Some kind of ODBC connector?

+1  A: 

Yes, there are ODBC-over-JDBC bridges. OpenLink, among others, provides one for Mac OS.

Matthew Flaschen
I hope the Leopard release works on Snow Leopard
Nick Retallack
Um, how do I use this thing?
Nick Retallack
I haven't tried it. However, the product includes basic support (http://support.openlinksw.com/supportweb/SupportServicesFAQ#SupportContractNeeded).
Matthew Flaschen
You mean I have to buy it before they'll explain how it works? This site is so businessy. I don't see developer documentation anywhere.
Nick Retallack
Oh, I found it. http://wikis.openlinksw.com/dataspace/owiki/wiki/UdaWikiWeb/InstallODBCJDBCLiteOSX
Nick Retallack
+1  A: 

Here is a patch to make psycopg2 2.2.1 work with vertica 4.0. No ODBC needed.

diff --git a/psycopg/connection_int.c b/psycopg/connection_int.c
index 902fdbb..b07eee8 100644
--- a/psycopg/connection_int.c
+++ b/psycopg/connection_int.c
@@ -280,6 +280,10 @@ conn_setup(connectionObject *self, PGconn *pgconn)
         pgres = psyco_exec_green(self, psyco_datestyle);
     }

+    if (self->server_version == 0 && self->protocol == 3) { /* vertica */
+      self->encoding = strdup("UTF8");
+      self->isolation_level = 0;
+    } else {
     if (pgres == NULL || PQresultStatus(pgres) != PGRES_COMMAND_OK ) {
         PyErr_SetString(OperationalError, "can't set datestyle to ISO");
         IFCLEARPGRES(pgres);
@@ -335,7 +339,7 @@ conn_setup(connectionObject *self, PGconn *pgconn)
         return -1;
     }
     self->isolation_level = conn_get_isolation_level(pgres);
-
+    }
     Py_UNBLOCK_THREADS;
     pthread_mutex_unlock(&self->lock);
     Py_END_ALLOW_THREADS;
diff --git a/psycopg/typecast_builtins.c b/psycopg/typecast_builtins.c
index e8e5a1a..45b9dbc 100644
--- a/psycopg/typecast_builtins.c
+++ b/psycopg/typecast_builtins.c
@@ -1,15 +1,15 @@
 static long int typecast_NUMBER_types[] = {20, 23, 21, 701, 700, 1700, 0};
-static long int typecast_LONGINTEGER_types[] = {20, 0};
+static long int typecast_LONGINTEGER_types[] = {6, 20, 0};
 static long int typecast_INTEGER_types[] = {23, 21, 0};
-static long int typecast_FLOAT_types[] = {701, 700, 0};
-static long int typecast_DECIMAL_types[] = {1700, 0};
-static long int typecast_UNICODE_types[] = {19, 18, 25, 1042, 1043, 0};
+static long int typecast_FLOAT_types[] = {7, 701, 700, 0};
+static long int typecast_DECIMAL_types[] = {16, 1700, 0};
+static long int typecast_UNICODE_types[] = {8, 9, 19, 18, 25, 1042, 1043, 0};
 static long int typecast_STRING_types[] = {19, 18, 25, 1042, 1043, 0};
-static long int typecast_BOOLEAN_types[] = {16, 0};
-static long int typecast_DATETIME_types[] = {1114, 1184, 704, 1186, 0};
-static long int typecast_TIME_types[] = {1083, 1266, 0};
-static long int typecast_DATE_types[] = {1082, 0};
-static long int typecast_INTERVAL_types[] = {704, 1186, 0};
+static long int typecast_BOOLEAN_types[] = {5, 0};
+static long int typecast_DATETIME_types[] = {12, 13, 1114, 1184, 704, 1186, 0};
+static long int typecast_TIME_types[] = {11, 15, 1083, 1266, 0};
+static long int typecast_DATE_types[] = {10, 1082, 0};
+static long int typecast_INTERVAL_types[] = {14, 704, 1186, 0};
 static long int typecast_BINARY_types[] = {17, 0};
 static long int typecast_ROWID_types[] = {26, 0};
 static long int typecast_LONGINTEGERARRAY_types[] = {1016, 0};
Serbaut
A: 

Another solution to consider for developers with similar needs is from Simba. The SimbaEngine SDK supports Mac OS 10.4 and above and allows you to bridge ODBC and JDBC solutions. You can get a free evaluation version of it at http://www.simba.com/evaluate-odbc-sdk.htm. When you fill out the form, indicate that you are interested in SimbaEngine SDK and that your platform is Mac OS.

cstein