--- parser3/src/classes/date.C 2001/07/09 16:13:17 1.3 +++ parser3/src/classes/date.C 2001/10/08 16:42:06 1.9 @@ -2,12 +2,10 @@ Parser: @b date parser class. Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) - Author: Alexander Petrosyan (http://design.ru/paf) - $Id: date.C,v 1.3 2001/07/09 16:13:17 parser Exp $ + $Id: date.C,v 1.9 2001/10/08 16:42:06 parser Exp $ */ -static const char *RCSId="$Id: date.C,v 1.3 2001/07/09 16:13:17 parser Exp $"; #include "classes.h" #include "pa_request.h" @@ -44,21 +42,21 @@ static void _set(Request& r, const Strin time_t time; if(params->size()==1) // ^set(float days) - time=(time_t)(params->as_double(0, r)*SECS_PER_DAY); + time=(time_t)(params->as_double(0, "float days must be double", r)*SECS_PER_DAY); else if(params->size()>=3) { // ^set(y;m;d[;h[;m[;s]]]) tm tmIn={0}; tmIn.tm_isdst=-1; - int year=params->as_int(0, r); + int year=params->as_int(0, "year must be int", r); if(year<70) // 0..69 -> 100..169 [2000..2069] year+=100; if(year>=1900) year-=1900; tmIn.tm_year=year; - tmIn.tm_mon=params->as_int(1, r)-1; - tmIn.tm_mday=params->as_int(2, r); - if(params->size()>3) tmIn.tm_hour=params->as_int(3, r); - if(params->size()>4) tmIn.tm_min=params->as_int(4, r); - if(params->size()>5) tmIn.tm_sec=params->as_int(5, r); + tmIn.tm_mon=params->as_int(1, "month must be int", r)-1; + tmIn.tm_mday=params->as_int(2, "mday must be int", r); + if(params->size()>3) tmIn.tm_hour=params->as_int(3, "hour must be int", r); + if(params->size()>4) tmIn.tm_min=params->as_int(4, "minutes must be int", r); + if(params->size()>5) tmIn.tm_sec=params->as_int(5, "seconds must be int", r); time=mktime(&tmIn); if(time<0) PTHROW(0, 0, @@ -71,15 +69,19 @@ static void _set(Request& r, const Strin vdate->set_time(time); } -static void _string(Request& r, const String& method_name, MethodParams *) { +static void _sql_string(Request& r, const String& method_name, MethodParams *) { Pool& pool=r.pool(); VDate *vdate=static_cast(r.self); int size=1+ 4+1+2+1+2 +1+ 2+1+2+1+2 +1 +1; char *buf=(char *)pool.malloc(size); time_t time=vdate->get_time(); - size=strftime(buf, size, "'%Y-%m-%d %H:%M:%S'", gmtime(&time)); + size=strftime(buf, size, "%Y-%m-%d %H:%M:%S", gmtime(&time)); - Value& result=*new(pool) VString(*new(pool) String(pool, buf, size)); + String& string=*new(pool) String(pool); + string.APPEND_CLEAN(buf, size, + method_name.origin().file, + method_name.origin().line); + Value& result=*new(pool) VString(string); r.write_assign_lang(result); } @@ -101,7 +103,7 @@ static void _roll(Request& r, const Stri &what, "must be year|month|day"); - *offset=params->as_int(1, r); + *offset=params->as_int(1, "offset must be int", r); if(!(*offset==1 || *offset==-1)) PTHROW(0, 0, &method_name, @@ -132,8 +134,8 @@ MDate::MDate(Pool& apool) : Methoded(apo // ^set(float days) add_native_method("set", Method::CT_DYNAMIC, _set, 1, 6); - // ^string[] - add_native_method("string", Method::CT_DYNAMIC, _string, 0, 0); + // ^sql-string[] + add_native_method("sql-string", Method::CT_DYNAMIC, _sql_string, 0, 0); // ^roll(year|month|day;+/- 1) add_native_method("roll", Method::CT_DYNAMIC, _roll, 2, 2);