--- parser3/src/classes/string.C 2002/10/29 10:19:40 1.122 +++ parser3/src/classes/string.C 2003/01/31 14:03:52 1.125.2.2 @@ -1,11 +1,11 @@ /** @file Parser: @b string parser class. - Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_STRING_C="$Date: 2002/10/29 10:19:40 $"; +static const char* IDENT_STRING_C="$Date: 2003/01/31 14:03:52 $"; #include "classes.h" #include "pa_request.h" @@ -48,7 +48,7 @@ static void _int(Request& r, const Strin converted=self_string->as_int(); } catch(...) { // convert problem if(!default_code) // we have a problem when no default - /*re*/throw; + rethrow; else converted=r.process_to_value(*default_code).as_int(); } @@ -68,7 +68,7 @@ static void _double(Request& r, const St converted=self_string->as_double(); } catch(...) { // convert problem if(!default_code) // we have a problem when no default - /*re*/throw; + rethrow; else converted=r.process_to_value(*default_code).as_double(); } @@ -146,8 +146,8 @@ static void split_list(Request& r, const static int split_options(const String *options) { struct Split_option { - const char *keyL; - const char *keyU; + const char* keyL; + const char* keyU; int setBit; int checkBit; } split_option[]={ @@ -366,7 +366,7 @@ static void _lower(Request& r, const Str class String_sql_event_handlers : public SQL_Driver_query_event_handlers { public: String_sql_event_handlers(Pool& apool, - const String& astatement_string, const char *astatement_cstr) : + const String& astatement_string, const char* astatement_cstr): pool(apool), statement_string(astatement_string), statement_cstr(astatement_cstr), @@ -374,28 +374,39 @@ public: result=new(pool) String(pool); } - void add_column(void *ptr, size_t size) { - if(got_column) - throw Exception("parser.runtime", + bool add_column(SQL_Error& error, void *ptr, size_t size) { + if(got_column) { + error=SQL_Error("parser.runtime", &statement_string, "result must contain exactly one column"); + return true; + } got_column=true; + return false; } - void before_rows() { /* ignore */ } - void add_row() { /* ignore */ } - void add_row_cell(void *ptr, size_t size) { - if(got_cell) - throw Exception("parser.runtime", + bool before_rows(SQL_Error& /*error*/ ) { /* ignore */ return false; } + bool add_row(SQL_Error& /*error*/) { /* ignore */ return false; } + bool add_row_cell(SQL_Error& error, void *ptr, size_t size) { + if(got_cell) { + error=SQL_Error("parser.runtime", &statement_string, "result must not contain more then one row"); - got_cell=true; + return true; + } - result->APPEND_TAINTED((const char *)ptr, size, statement_cstr, 0); + try { + got_cell=true; + result->APPEND_TAINTED((const char* )ptr, size, statement_cstr, 0); + return false; + } catch(...) { + error=SQL_Error("exception occured in String_sql_event_handlers::add_row_cell"); + return true; + } } private: Pool& pool; - const String& statement_string; const char *statement_cstr; + const String& statement_string; const char* statement_cstr; bool got_column; public: bool got_cell; @@ -436,7 +447,7 @@ const String* sql_result_string(Request& Temp_lang temp_lang(r, String::UL_SQL); const String& statement_string=r.process_to_string(statement); - const char *statement_cstr= + const char* statement_cstr= statement_string.cstr(String::UL_UNSPECIFIED, r.connection(&method_name)); String_sql_event_handlers handlers(pool, statement_string, statement_cstr); r.connection(&method_name)->query( @@ -502,7 +513,7 @@ static void _save(Request& r, const Stri } // write - const char *buf=src.cstr(String::UL_UNSPECIFIED, r.connection(0/*no error if none*/)); + const char* buf=src.cstr(String::UL_UNSPECIFIED, r.connection(0/*no error if none*/)); file_write(r.absolute(file_name), buf, strlen(buf), true, do_append); }