--- parser3/src/classes/string.C 2002/04/23 10:30:03 1.110 +++ 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.110 2002/04/23 10:30:03 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)); } @@ -238,7 +238,6 @@ static void _match(Request& r, const Str result=new(pool) VBool(pool, matched); r.write_assign_lang(*result); } else { // replace - char* src_cstr; const String& src=*r.self->get_string(); Value& replacement_code=params->as_junction(2, "replacement param must be code"); @@ -328,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(); @@ -354,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] @@ -428,7 +421,7 @@ static void _save(Request& r, const Stri buf, strlen(buf), true, do_append); } -static void _optimize(Request& r, const String& method_name, MethodParams * /*params*/) { +static void _normalize(Request& r, const String& method_name, MethodParams * /*params*/) { r.write_assign_lang(r.self->get_string()->join_chains(r.pool(), 0/*cstr*/)); } @@ -482,8 +475,8 @@ MString::MString(Pool& apool) : Methoded // ^string.save[file] add_native_method("save", Method::CT_DYNAMIC, _save, 1, 2); - // ^string.optimize[] - add_native_method("optimize", Method::CT_DYNAMIC, _optimize, 0, 0); + // ^string.normalize[] + add_native_method("normalize", Method::CT_DYNAMIC, _normalize, 0, 0); } // global variable