Changeset: 7b1014a306e0 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7b1014a306e0 Modified Files: clients/odbc/driver/SQLColumns.c Branch: Aug2011 Log Message:
Fix SQLColumns.
At some point (probably long ago) the representation of the various
interval types was changed. Adapt to that.
Also, when catalogs aren't used, the value is supposed to be NULL, not
the empty string.
diffs (169 lines):
diff --git a/clients/odbc/driver/SQLColumns.c b/clients/odbc/driver/SQLColumns.c
--- a/clients/odbc/driver/SQLColumns.c
+++ b/clients/odbc/driver/SQLColumns.c
@@ -148,7 +148,7 @@ SQLColumns_(ODBCStmt *stmt,
sprintf(query_end,
"select "
- "cast('' as varchar(1)) as table_cat, "
+ "cast(NULL as varchar(1)) as table_cat, "
"s.\"name\" as table_schem, "
"t.\"name\" as table_name, "
"c.\"name\" as column_name, "
@@ -252,9 +252,42 @@ SQLColumns_(ODBCStmt *stmt,
concise_type = ODBCConciseType(tuples[i][5]);
free((void *) tuples[i][5]);
switch (concise_type) {
+ case SQL_INTERVAL_MONTH: {
+ int q1 = atoi(tuples[i][6]);
+
+ /* we assume a leading precision of 6 */
+ free((void *) tuples[i][6]);
+ tuples[i][6] = NULL;
+ free((void *) tuples[i][7]);
+ tuples[i][7] = NULL;
+ free((void *) tuples[i][8]);
+ tuples[i][8] = NULL;
+ switch (q1) {
+ case 1:
+ concise_type = SQL_INTERVAL_YEAR;
+ tuples[i][6] = strdup("26");
+ tuples[i][7] = strdup("26");
+ tuples[i][8] = strdup("0");
+ break;
+ case 2:
+ concise_type =
SQL_INTERVAL_YEAR_TO_MONTH;
+ tuples[i][6] = strdup("38");
+ tuples[i][7] = strdup("38");
+ tuples[i][8] = strdup("0");
+ break;
+ case 3:
+ concise_type = SQL_INTERVAL_MONTH;
+ tuples[i][6] = strdup("27");
+ tuples[i][7] = strdup("27");
+ tuples[i][8] = strdup("0");
+ break;
+ default:
+ assert(0);
+ }
+ break;
+ }
case SQL_INTERVAL_SECOND: {
- int q2 = atoi(tuples[i][7]);
- int q1 = atoi(tuples[i][8]);
+ int q1 = atoi(tuples[i][6]);
/* we assume a leading precision of 6
and a second precision of 0 */
@@ -264,88 +297,70 @@ SQLColumns_(ODBCStmt *stmt,
tuples[i][7] = NULL;
free((void *) tuples[i][8]);
tuples[i][8] = NULL;
- if (q1 == 3 && q2 == 3) {
+ switch (q1) {
+ case 4:
concise_type = SQL_INTERVAL_DAY;
tuples[i][6] = strdup("25");
tuples[i][7] = strdup("25");
tuples[i][8] = strdup("0");
- } else if (q1 == 3 && q2 == 4) {
+ break;
+ case 5:
concise_type = SQL_INTERVAL_DAY_TO_HOUR;
tuples[i][6] = strdup("36");
tuples[i][7] = strdup("36");
tuples[i][8] = strdup("0");
- } else if (q1 == 3 && q2 == 5) {
+ break;
+ case 6:
concise_type =
SQL_INTERVAL_DAY_TO_MINUTE;
tuples[i][6] = strdup("41");
tuples[i][7] = strdup("41");
tuples[i][8] = strdup("0");
- } else if (q1 == 3 && q2 == 6) {
+ break;
+ case 7:
concise_type =
SQL_INTERVAL_DAY_TO_SECOND;
tuples[i][6] = strdup("47");
tuples[i][7] = strdup("47");
tuples[i][8] = strdup("0");
- } else if (q1 == 4 && q2 == 4) {
+ break;
+ case 8:
concise_type = SQL_INTERVAL_HOUR;
tuples[i][6] = strdup("26");
tuples[i][7] = strdup("26");
tuples[i][8] = strdup("0");
- } else if (q1 == 4 && q2 == 5) {
+ break;
+ case 9:
concise_type =
SQL_INTERVAL_HOUR_TO_MINUTE;
tuples[i][6] = strdup("39");
tuples[i][7] = strdup("39");
tuples[i][8] = strdup("0");
- } else if (q1 == 4 && q2 == 6) {
+ break;
+ case 10:
concise_type =
SQL_INTERVAL_HOUR_TO_SECOND;
tuples[i][6] = strdup("45");
tuples[i][7] = strdup("45");
tuples[i][8] = strdup("0");
- } else if (q1 == 5 && q2 == 5) {
+ break;
+ case 11:
concise_type = SQL_INTERVAL_MINUTE;
tuples[i][6] = strdup("28");
tuples[i][7] = strdup("28");
tuples[i][8] = strdup("0");
- } else if (q1 == 5 && q2 == 6) {
+ break;
+ case 12:
concise_type =
SQL_INTERVAL_MINUTE_TO_SECOND;
tuples[i][6] = strdup("44");
tuples[i][7] = strdup("44");
tuples[i][8] = strdup("0");
- } else if (q1 == 6 && q2 == 6) {
+ break;
+ case 13:
concise_type = SQL_INTERVAL_SECOND;
tuples[i][6] = strdup("30");
tuples[i][7] = strdup("30");
tuples[i][8] = strdup("0");
- } else
+ break;
+ default:
assert(0);
- break;
- }
- case SQL_INTERVAL_MONTH: {
- int q2 = atoi(tuples[i][7]);
- int q1 = atoi(tuples[i][8]);
-
- /* we assume a leading precision of 6 */
- free((void *) tuples[i][6]);
- tuples[i][6] = NULL;
- free((void *) tuples[i][7]);
- tuples[i][7] = NULL;
- free((void *) tuples[i][8]);
- tuples[i][8] = NULL;
- if (q1 == 1 && q2 == 1) {
- concise_type = SQL_INTERVAL_YEAR;
- tuples[i][6] = strdup("26");
- tuples[i][7] = strdup("26");
- tuples[i][8] = strdup("0");
- } else if (q1 == 1 && q2 == 2) {
- concise_type =
SQL_INTERVAL_YEAR_TO_MONTH;
- tuples[i][6] = strdup("38");
- tuples[i][7] = strdup("38");
- tuples[i][8] = strdup("0");
- } else if (q1 == 2 && q2 == 2) {
- concise_type = SQL_INTERVAL_MONTH;
- tuples[i][6] = strdup("27");
- tuples[i][7] = strdup("27");
- tuples[i][8] = strdup("0");
- } else
- assert(0);
+ }
break;
}
case SQL_DOUBLE:
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list
