--- parser3/src/classes/string.C 2002/06/25 14:28:57 1.112 +++ parser3/src/classes/string.C 2002/08/15 10:38:18 1.117 @@ -3,10 +3,10 @@ Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) - - $Id: string.C,v 1.112 2002/06/25 14:28:57 paf Exp $ */ +static const char* IDENT_STRING_C="$Date: 2002/08/15 10:38:18 $"; + #include "classes.h" #include "pa_request.h" #include "pa_vdouble.h" @@ -105,9 +105,9 @@ static void _mid(Request& r, const Strin Pool& pool=r.pool(); const String& string=*r.self->get_string(); - size_t p=(size_t)params->as_int(0, "p must be int", r); + size_t p=(size_t)max(0, params->as_int(0, "p must be int", r)); size_t n=params->size()>1? - (size_t)params->as_int(1, "n must be int", r):string.size(); + (size_t)max(0, params->as_int(1, "n must be int", r)):string.size(); r.write_assign_lang(string.mid(p, p+n)); } @@ -327,7 +327,7 @@ const String* sql_result_string(Request& default_code=0; if(params->size()>1) { Value& voptions=params->as_no_junction(1, "options must be hash, not code"); - if(voptions.is_defined()) + if(!voptions.is_string()) if(options=voptions.get_hash(&method_name)) { if(Value *vlimit=(Value *)options->get(*sql_limit_name)) limit=(ulong)r.process_to_value(*vlimit).as_double(); @@ -353,16 +353,10 @@ const String* sql_result_string(Request& const char *statement_cstr= statement_string.cstr(String::UL_UNSPECIFIED, r.connection(&method_name)); String_sql_event_handlers handlers(pool, statement_string, statement_cstr); - try { - r.connection(&method_name)->query( - statement_cstr, offset, limit, - handlers); - } catch(const Exception& e) { // query problem - // give more specific source [were url] - throw Exception("sql.execute", - &statement_string, - "%s", e.comment()); - } + r.connection(&method_name)->query( + statement_cstr, offset, limit, + handlers, + statement_string); if(!handlers.got_cell) return 0; // no lines, caller should return second param[default value]