Changeset: 1730cb41bc32 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1730cb41bc32
Modified Files:
        clients/odbc/driver/SQLExecute.c
        clients/odbc/driver/SQLPrepare.c
Branch: Aug2011
Log Message:

Parse table name from result set into schema.table and don't strdup empty 
string.


diffs (71 lines):

diff --git a/clients/odbc/driver/SQLExecute.c b/clients/odbc/driver/SQLExecute.c
--- a/clients/odbc/driver/SQLExecute.c
+++ b/clients/odbc/driver/SQLExecute.c
@@ -174,15 +174,14 @@ ODBCInitResult(ODBCStmt *stmt)
                        s = "";
                if (*s) {
                        rec->sql_desc_unnamed = SQL_NAMED;
-                       rec->sql_desc_base_column_name = (SQLCHAR *) strdup(s);
                        rec->sql_desc_label = (SQLCHAR *) strdup(s);
                        rec->sql_desc_name = (SQLCHAR *) strdup(s);
                } else {
                        rec->sql_desc_unnamed = SQL_UNNAMED;
-                       rec->sql_desc_base_column_name = NULL;
                        rec->sql_desc_label = NULL;
                        rec->sql_desc_name = NULL;
                }
+               rec->sql_desc_base_column_name = NULL; /* see below */
 
                s = mapi_get_type(hdl, i);
                if (s == NULL)  /* shouldn't happen */
@@ -213,17 +212,31 @@ ODBCInitResult(ODBCStmt *stmt)
                        rec->sql_desc_case_sensitive = SQL_FALSE;
 
                s = mapi_get_table(hdl, i);
-               rec->sql_desc_base_table_name = (SQLCHAR *) strdup(s ? s : "");
-               rec->sql_desc_table_name = (SQLCHAR *) strdup(s ? s : "");
+               if (s) {
+                       char *p = strchr(s, '.');
+                       if (p) {
+                               rec->sql_desc_schema_name = (SQLCHAR *) 
dupODBCstring((SQLCHAR *) s, p - s);
+                               rec->sql_desc_table_name = (SQLCHAR *) strdup(p 
+ 1);
+                               if (p != s) {
+                                       /* base table name and base
+                                        * column name exist if there
+                                        * is a schema name */
+                                       rec->sql_desc_base_table_name = 
(SQLCHAR *) strdup(p + 1);
+                                       if (rec->sql_desc_name)
+                                               rec->sql_desc_base_column_name 
= (SQLCHAR *) strdup((char *) rec->sql_desc_name);
+                               }
+                       } else {
+                               rec->sql_desc_table_name = (SQLCHAR *) 
strdup(s);
+                       }
+               }
 
                if ((rec->sql_desc_length = mapi_get_digits(hdl, i)) == 0)
                        rec->sql_desc_length = mapi_get_len(hdl, i);
 
-               rec->sql_desc_local_type_name = (SQLCHAR *) strdup("");
-               rec->sql_desc_catalog_name = (SQLCHAR *) strdup("");
-               rec->sql_desc_literal_prefix = (SQLCHAR *) strdup("");
-               rec->sql_desc_literal_suffix = (SQLCHAR *) strdup("");
-               rec->sql_desc_schema_name = (SQLCHAR *) strdup("");
+               rec->sql_desc_local_type_name = NULL;
+               rec->sql_desc_catalog_name = NULL;
+               rec->sql_desc_literal_prefix = NULL;
+               rec->sql_desc_literal_suffix = NULL;
 
                /* unused fields */
                rec->sql_desc_data_ptr = NULL;
diff --git a/clients/odbc/driver/SQLPrepare.c b/clients/odbc/driver/SQLPrepare.c
--- a/clients/odbc/driver/SQLPrepare.c
+++ b/clients/odbc/driver/SQLPrepare.c
@@ -229,7 +229,7 @@ SQLPrepare_(ODBCStmt *stmt,
                else
                        rec->sql_desc_case_sensitive = SQL_FALSE;
 
-               rec->sql_desc_local_type_name = (SQLCHAR *) strdup("");
+               rec->sql_desc_local_type_name = NULL;
                rec->sql_desc_nullable = SQL_NULLABLE;
                rec->sql_desc_parameter_type = SQL_PARAM_INPUT;
                rec->sql_desc_rowver = SQL_FALSE;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to