Date: Thursday, January 19, 2006 @ 17:01:54
Author: csaba
Path: /cvsroot/carob/libmysequoia
Modified: include/Utils.hpp (1.16 -> 1.17) src/Utils.cpp (1.26 -> 1.27)
Implemented str_to_MYSQL_TIME() function.
-------------------+
include/Utils.hpp | 5 ++
src/Utils.cpp | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 102 insertions(+), 3 deletions(-)
Index: libmysequoia/include/Utils.hpp
diff -u libmysequoia/include/Utils.hpp:1.16 libmysequoia/include/Utils.hpp:1.17
--- libmysequoia/include/Utils.hpp:1.16 Wed Jan 18 12:30:02 2006
+++ libmysequoia/include/Utils.hpp Thu Jan 19 17:01:54 2006
@@ -128,4 +128,9 @@
*/
bool MYSQL_TIME_to_str(MYSQL_TIME *t, char *s, int maxlen);
+/**
+ * Convert a character string to a MYSQL_TIME structure
+ */
+bool str_to_MYSQL_TIME(const char *s, MYSQL_TIME *t);
+
#endif /* _UTILS_HPP */
Index: libmysequoia/src/Utils.cpp
diff -u libmysequoia/src/Utils.cpp:1.26 libmysequoia/src/Utils.cpp:1.27
--- libmysequoia/src/Utils.cpp:1.26 Thu Jan 19 15:37:21 2006
+++ libmysequoia/src/Utils.cpp Thu Jan 19 17:01:54 2006
@@ -788,15 +788,36 @@
break;
case MYSQL_TYPE_TIME:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ if (str_to_MYSQL_TIME(s->data(), (MYSQL_TIME *)bind->buffer))
+ {
+ *bind->error = ((MYSQL_TIME *)bind->buffer)->time_type !=
MYSQL_TIMESTAMP_TIME;
+ }
+ else
+ {
+ *bind->error = true;
+ }
break;
case MYSQL_TYPE_DATE:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ if (str_to_MYSQL_TIME(s->data(), (MYSQL_TIME *)bind->buffer))
+ {
+ *bind->error = ((MYSQL_TIME *)bind->buffer)->time_type !=
MYSQL_TIMESTAMP_DATE;
+ }
+ else
+ {
+ *bind->error = true;
+ }
break;
case MYSQL_TYPE_DATETIME:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ if (str_to_MYSQL_TIME(s->data(), (MYSQL_TIME *)bind->buffer))
+ {
+ *bind->error = ((MYSQL_TIME *)bind->buffer)->time_type !=
MYSQL_TIMESTAMP_DATETIME;
+ }
+ else
+ {
+ *bind->error = true;
+ }
break;
default:
@@ -1051,3 +1072,76 @@
return result;
}
+
+/*
+ * Recognized time formats:
+ *
+ * YYYY-MM-DD HH:MM:SS
+ * YY-MM-DD HH:MM:SS
+ * YYYYMMDDTHHMMSS
+ * YYYYMMDDHHMMSS
+ * YYMMDDHHMMSS
+ * YYYY-MM-DD
+ * YY-MM-DD
+ * YYYYMMDD
+ * HH:MM:SS
+ * YYMMDD
+ */
+bool str_to_MYSQL_TIME(const char *s, MYSQL_TIME *t)
+{
+ bool result = true;
+ tm tm = {0};
+
+ memset(t, 0, sizeof(MYSQL_TIME));
+
+ if (strptime(s, "%Y-%m-%d %H:%M:%S", &tm) != 0)
+ { t->time_type = MYSQL_TIMESTAMP_DATETIME; }
+ else if (strptime(s, "%y-%m-%d %H:%M:%S", &tm) != 0)
+ { t->time_type = MYSQL_TIMESTAMP_DATETIME; }
+ else if (strptime(s, "%Y%m%dT%H%M%S", &tm) != 0)
+ { t->time_type = MYSQL_TIMESTAMP_DATETIME; }
+ else if (strptime(s, "%Y%m%d%H%M%S", &tm) != 0)
+ { t->time_type = MYSQL_TIMESTAMP_DATETIME; }
+ else if (strptime(s, "%y%m%d%H%M%S", &tm) != 0)
+ { t->time_type = MYSQL_TIMESTAMP_DATETIME; }
+ else if (strptime(s, "%Y-%m-%d", &tm) != 0)
+ { t->time_type = MYSQL_TIMESTAMP_DATE; }
+ else if (strptime(s, "%y-%m-%d", &tm) != 0)
+ { t->time_type = MYSQL_TIMESTAMP_DATE; }
+ else if (strptime(s, "%Y%m%d", &tm) != 0)
+ { t->time_type = MYSQL_TIMESTAMP_DATE; }
+ else if (strptime(s, "%H:%M:%S", &tm) != 0)
+ { t->time_type = MYSQL_TIMESTAMP_TIME; }
+ else if (strptime(s, "%y%m%d", &tm) != 0)
+ { t->time_type = MYSQL_TIMESTAMP_DATE; }
+ else result = false;
+
+ if (result)
+ {
+ if (t->time_type == MYSQL_TIMESTAMP_DATE ||
+ t->time_type == MYSQL_TIMESTAMP_DATETIME)
+ {
+ if (tm.tm_year + 1900 > 1900)
+ t->year = tm.tm_year + 1900;
+ else
+ t->year = (tm.tm_year + 1900) + 2000;
+
+ t->month = tm.tm_mon + 1;
+ t->day = tm.tm_mday;
+ }
+
+ if (t->time_type == MYSQL_TIMESTAMP_TIME ||
+ t->time_type == MYSQL_TIMESTAMP_DATETIME)
+ {
+ t->hour = tm.tm_hour;
+ t->minute = tm.tm_min;
+ t->second = tm.tm_sec;
+ }
+ }
+ else
+ {
+ t->time_type = MYSQL_TIMESTAMP_ERROR;
+ }
+
+ return result;
+}
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits