--- parser3/src/classes/void.C 2001/06/28 07:41:59 1.2 +++ parser3/src/classes/void.C 2001/08/09 06:48:45 1.7 @@ -4,10 +4,8 @@ Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - - $Id: void.C,v 1.2 2001/06/28 07:41:59 parser Exp $ */ -static char *RCSId="$Id: void.C,v 1.2 2001/06/28 07:41:59 parser Exp $"; +static const char *RCSId="$Id: void.C,v 1.7 2001/08/09 06:48:45 parser Exp $"; #include "classes.h" #include "pa_request.h" @@ -33,18 +31,37 @@ public: // Methoded static void _int(Request& r, const String&, MethodParams *) { Pool& pool=r.pool(); - VInt *vunknown=static_cast(r.self); - Value& value=*new(pool) VInt(pool, vunknown->as_int()); - r.write_no_lang(value); + VVoid *vvoid=static_cast(r.self); + r.write_no_lang(*new(pool) VInt(pool, vvoid->as_int())); } static void _double(Request& r, const String&, MethodParams *) { Pool& pool=r.pool(); - VInt *vunknown=static_cast(r.self); - Value& value=*new(pool) VDouble(pool, vunknown->as_double()); - r.write_no_lang(value); + VVoid *vvoid=static_cast(r.self); + r.write_no_lang(*new(pool) VDouble(pool, vvoid->as_double())); } +#ifndef DOXYGEN +class Void_sql_event_handlers : public SQL_Driver_query_event_handlers { +public: + Void_sql_event_handlers(Pool& apool, const String& astatement_string) : + pool(apool), statement_string(astatement_string) { + } + void add_column(void *ptr, size_t size) { /* ignore */ } + void before_rows() { + // there are some result rows, which is wrong + PTHROW(0, 0, + &statement_string, + "must return nothing"); + } + void add_row() { /* never */ } + void add_row_cell(void *ptr, size_t size) { /* never */ } + +private: + Pool& pool; + const String& statement_string; +}; +#endif static void _sql(Request& r, const String& method_name, MethodParams *params) { Pool& pool=r.pool(); @@ -53,22 +70,20 @@ static void _sql(Request& r, const Strin &method_name, "without connect"); - Value& statement=params->get_junction(0, "statement must be code"); + Value& statement=params->as_junction(0, "statement must be code"); Temp_lang temp_lang(r, String::UL_SQL); const String& statement_string=r.process(statement).as_string(); const char *statement_cstr= statement_string.cstr(String::UL_UNSPECIFIED, r.connection); - unsigned int sql_column_count; SQL_Driver::Cell *sql_columns; - unsigned long sql_row_count; SQL_Driver::Cell **sql_rows; + Void_sql_event_handlers handlers(pool, statement_string); bool need_rethrow=false; Exception rethrow_me; PTRY { r.connection->query( statement_cstr, 0, 0, - &sql_column_count, &sql_columns, - &sql_row_count, &sql_rows); + handlers); } - PCATCH(e) { // connect/process problem + PCATCH(e) { rethrow_me=e; need_rethrow=true; } PEND_CATCH @@ -76,12 +91,6 @@ static void _sql(Request& r, const Strin PTHROW(rethrow_me.type(), rethrow_me.code(), &statement_string, // setting more specific source [were url] rethrow_me.comment()); - - // there are some result rows, which is wrong - if(sql_row_count) - PTHROW(0, 0, - &statement_string, - "must not return result"); } // constructor