summaryrefslogtreecommitdiff
path: root/src/interfaces/odbc/connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/odbc/connection.c')
-rw-r--r--src/interfaces/odbc/connection.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/interfaces/odbc/connection.c b/src/interfaces/odbc/connection.c
index 81ed7d5ba7a..9ae47052f78 100644
--- a/src/interfaces/odbc/connection.c
+++ b/src/interfaces/odbc/connection.c
@@ -240,6 +240,7 @@ CC_conninfo_init(ConnInfo *conninfo)
conninfo->allow_keyset = -1;
conninfo->lf_conversion = -1;
conninfo->true_is_minus1 = -1;
+ conninfo->int8_as = -101;
memcpy(&(conninfo->drivers), &globals, sizeof(globals));
}
/*
@@ -298,6 +299,7 @@ CC_Constructor()
rv->client_encoding = NULL;
rv->server_encoding = NULL;
#endif /* MULTIBYTE */
+ rv->current_schema = NULL;
/* Initialize statement options to defaults */
@@ -503,6 +505,9 @@ CC_cleanup(ConnectionClass *self)
free(self->server_encoding);
self->server_encoding = NULL;
#endif /* MULTIBYTE */
+ if (self->current_schema)
+ free(self->current_schema);
+ self->current_schema = NULL;
/* Free cached table info */
if (self->col_info)
{
@@ -513,6 +518,8 @@ CC_cleanup(ConnectionClass *self)
if (self->col_info[i]->result) /* Free the SQLColumns result structure */
QR_Destructor(self->col_info[i]->result);
+ if (self->col_info[i]->schema)
+ free(self->col_info[i]->schema);
free(self->col_info[i]);
}
free(self->col_info);
@@ -986,6 +993,9 @@ another_version_retry:
}
}
}
+#else
+ {
+ }
#endif /* UNICODE_SUPPORT */
}
#ifdef UNICODE_SUPPORT
@@ -2046,6 +2056,27 @@ CC_get_max_query_len(const ConnectionClass *conn)
return value;
}
+/*
+ * This deosn't really return the CURRENT SCHEMA
+ * but there's no alternative.
+ */
+const char *
+CC_get_current_schema(ConnectionClass *conn)
+{
+ if (!conn->current_schema && conn->schema_support)
+ {
+ QResultClass *res;
+
+ if (res = CC_send_query(conn, "select current_schema()", NULL, CLEAR_RESULT_ON_ABORT), res)
+ {
+ if (QR_get_num_total_tuples(res) == 1)
+ conn->current_schema = strdup(QR_get_value_backend_row(res, 0, 0));
+ QR_Destructor(res);
+ }
+ }
+ return (const char *) conn->current_schema;
+}
+
int
CC_send_cancel_request(const ConnectionClass *conn)
{